为 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 的用法,并且只包含这段代码而不是扩展。
稍后为了可重用性,您可以调用该服务来执行您的代码而不是扩展。
这将使您能够控制这些片段中的依赖项,并且能够以更简单的方式切换依赖项注入的实现。
我是 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 的用法,并且只包含这段代码而不是扩展。
稍后为了可重用性,您可以调用该服务来执行您的代码而不是扩展。
这将使您能够控制这些片段中的依赖项,并且能够以更简单的方式切换依赖项注入的实现。