C# 类上的扩展方法-好主意还是坏主意?

C# 类上的扩展方法-好主意还是坏主意?,c#,asp.net,entity-framework,extension-methods,C#,Asp.net,Entity Framework,Extension Methods,我已经有了实体框架,还有一个存储库和一些用于操作数据的静态类/方法。下面是一个典型的例子: public static IEnumerable<Supplier> Contains(IEnumerable<int> idList) { return SupplierView.Select().Where(x => idList.Contains(x.ID)); } 这些方法查询我的EF存储库,有时我需要传递一些变量来获取我需要的数据 鉴于我的供应商实体已经

我已经有了实体框架,还有一个存储库和一些用于操作数据的静态类/方法。下面是一个典型的例子:

public static IEnumerable<Supplier> Contains(IEnumerable<int> idList)
{
    return SupplierView.Select().Where(x => idList.Contains(x.ID));
}
这些方法查询我的EF存储库,有时我需要传递一些变量来获取我需要的数据

鉴于我的供应商实体已经存在,我正在考虑使用类来扩展我的查询方法,如下所示:

    public static IEnumerable<Supplier> GetSimilar(this Supplier s)
    {
        return SupplierView.Select().Where(/* the criteria matches */));
    }
它只用于查询数据-但由于我基于整个实体的扩展方法,我不确定这是否是一个好的设计思想-但传递参数/验证参数等肯定更方便

我已经为我的主要实体设置了一个分部类,但我倾向于添加属性和低影响的东西

有什么想法吗?

供应商是你自己的职业吗

如果是,那么我建议只扩展该类,而不是附加扩展方法

如果它是EF从数据库生成的类,那么它是一个公共分部类,因此您可以在第二个文件中轻松地为供应商编写其他方法,也可以使用公共分部类-然后在编译时将这些方法合并到一个.NET类中


我喜欢扩展方法,如果需要将方法添加到不受控制的类中,例如.NET framework类或第三方类,扩展方法很有意义。

当您控制类时,扩展方法也很有意义,但当您尝试在另一个程序集中扩展自己的类时,通常不能使用部分定义。因此,根据OP的解决方案架构,部分类可能不是一个选项。我已经使用了分部类来添加我自己的供应商属性,但是我给出的示例需要查询其他供应商的数据库。很抱歉,错过了编辑截止日期:澄清一下,EF是DAL-示例中的方法是BLL。我已经使用了分部类来固定我自己的供应商属性实体项目,但我给出的例子需要查询其他供应商的数据库,这样它就需要在DAL之上定位实体没有的位置。我不认为有任何明显的理由选择这两种方法中的任何一种——您需要查看您的总体代码,看看这些方法最适合哪种。也许你有许多不同的查询,它们自然地组合在一起,或者你想要智能化的好处,但不喜欢庞大的厨房水槽类。。。我觉得没有真正的答案…谢谢你的评论Alexie。我在这种环境中的经验相对较少——我并不讨厌以这种方式使用类,但我的纯粹主义者说它打破了封装等规则。