规格模式与扩展方法?

Fre*_*ood 6 .net c# specification-pattern

我试图掌握规范模式,我对它有点困惑.我真的觉得它对我的具体要求没有帮助.我想知道如果我更喜欢扩展方法来解决我的复杂问题,那会是什么问题?例如

public static class ProductExtensions
{
    public static IQueryable<Product> InStocks(this IQueryable<Product> query)
    {
        return query.Where(p => p.InStock && !p.IsDeleted /*others goes here*/);
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现用扩展方法包装我的长规格而不是使用spesification模式很有帮助.这有什么问题?

Bro*_*ass 5

您当前的方法没有任何问题.

当您处理可以任意应用的组合时,规范模式作为一个非常通用的概念是有意义的,因为它们表达了正交概念 - 即产品是微波炉,它的重量也不到5磅.

当你想要将总是出现在一起的某些条件分组时,扩展方法是有意义的,即产品有库存,我们仍然提供它以形成一个更易于使用的抽象,即InStock.扩展方法的其他用途是允许最终查询的更"流畅"组合,这是许多人更喜欢的.

这两个概念并不相互排斥,您应该使用最可读代码的结果来表达您想要表达的任何内容.


Mar*_*oms 4

规范模式允许程序员在运行时组合数据。这比仅仅使用扩展方法更灵活。例如,如果您想要IQueryable<Product>库存中的产品以及上周售完或从未订购过的所有产品,该怎么办?编写这样的查询需要您创建一个完整的其他扩展方法,其中规范模式将允许您使用简单的 API 来编写它。

IQueryable 接口实际上减轻了规范模式的一些优点,但在我看来,开发人员并不总是清楚如何以及在何处使用 IQueryable 执行查询,这可能是也可能不是问题,具体取决于您的情况。