为 DbSet<T> 创建扩展方法是一种不好的做法吗?

Is it a bad practice to create extension methods for DbSet<T>?

我是 EF Core 的新手,想知道为 DbSet 创建扩展方法是否是对它的滥用。

我的代码库中有很多长查询,我认为这些查询会从扩展方法中受益(就可维护性而言)。

对我来说,这

 var appUsersSegments = dbContext.ApplicationUsersSegments
    .Where(a => a.App.AppId == selectedApp.AppId)
    .OrderBy(a => a.CreatedDate)
    .ToList();

很容易

 var appId = 232;
 var appUsersSegments = dbContext.ApplicationUsersSegments.FindRecent(appId);

因为这可以防止我的代码因到处都是相同的长查询而变得臃肿。

关于 DbSet 或 EF Core,有什么我不知道的比创建扩展方法更好的地方吗?

您可能不应该这样做,因为长期 运行 会更难维护。

它还使开发人员能够编写糟糕的代码。

例如,直接从任何地方使用扩展方法调用 DbContext,同时说它是没有任何抽象的代码重用。

最好的做法是实现一个服务,无论是使用 repository pattern or even CQRS pattern,它抽象了 DbContext 的用法,并且只包含这段代码而不是扩展。

稍后为了可重用性,您可以调用该服务来执行您的代码而不是扩展。

这将使您能够控制这些片段中的依赖项,并且能够以更简单的方式切换依赖项注入的实现。