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

标签 c# asp.net entity-framework extension-methods

我已经有了 Entity Framework 以及一个存储库和一些用于处理数据的静态类/方法。这是一个典型的例子:

public static IEnumerable<Supplier> Contains(IEnumerable<int> idList)
{
    return SupplierView.Select().Where(x => idList.Contains(x.ID));
}

这些方法查询我的 EF 存储库,有时我需要传递一些变量来获取我需要的数据。

鉴于我的 Supplier 实体已经存在,我正在考虑使用该类制作我的查询扩展方法,如下所示:

    public static IEnumerable<Supplier> GetSimilar(this Supplier s)
    {
        return SupplierView.Select().Where(/* the criteria matches */));
    }

它只会用于查询数据 - 但由于我将扩展方法基于整个实体,我不确定这是否是一个很棒的设计理念 - 但传递参数/验证它们肯定更方便等等

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

有什么想法吗?

最佳答案

Supplier 是您自己的类吗?

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

如果它是由 EF 从数据库生成的类,则它是一个 public partial class,因此您可以轻松地在第二个文件中为 Supplier 编写其他方法,也可以使用public partial class - 然后在编译时将它们合并到一个 .NET 类中。

我喜欢扩展方法,它们很有意义 - 如果您需要向您无法控制的类添加方法 - 例如.NET 框架类或第三方类。

关于c# - 类上的扩展方法 - 好主意还是坏主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28746315/

相关文章:

c# - 将条件参数传递给 Database.SqlQuery

c# - 我希望能够通过网络从 BIOS 中提取错误日志

c# - 将 datetime2 数据类型转换为 smalldatetime 数据类型导致值超出范围。\r\n语句已终止

asp.net - 如何避免在网站导航时刷新母版页?

c# - 将存储库缩减为聚合根

c# - EF Core - 类中的多对多关系

asp.net - 模拟asp.net中的非域用户帐户

c# - ASP.NET 覆盖 web 方法

entity-framework - 在带有 EF5 的 ASP.NET MVC 4 中使用 MiniProfiler

c# - 实现 IAuthenticationFilter、工作单元和依赖注入(inject)