我的应用程序使用SQL Server 2012,EF6,MVC和Web API。

它还使用存储库和各种文件,例如:

DatabaseFactory.cs
Disposable.cs
IDatabaseFactory.cs
IRepository.cs
IUnitOfWork.cs
RepositoryBase.cs
UnitOfWork.cs

我们已经在 Controller 和存储库之间使用了服务层
一些复杂的业务逻辑。我们没有任何计划要更改到其他数据库,并且已经指出
对我来说,最近的想法是EF6是一个存储库,那么为什么要构建
另一个存储库位于之上,为什么我的所有文件都位于之上。

我开始认为这是一个明智的方法。

有谁知道实现EF6的任何示例而没有
存储库以及服务层。我在网络上的搜索显示了许多
复杂的代码示例,看起来完全没有原因,因此过于复杂。

我的问题也是在使用服务层时,我该放在哪里:
context = new EFDbContext()

在 Controller 中,服务层或两者兼而有之?我读到我可以通过依赖注入(inject)来做到这一点。我已经将Unity用作IOC,但是我不知道该怎么做。

最佳答案

Entity Framework 既是工作单元模式的实现,又是通用存储库的实现(DbContext是UoW,DbSet是通用存储库)。而且我同意,在大多数应用程序中过度使用它们来设计另一个UoW或通用存储库是过大的方法(此外,某些人将GenericRepsitory视为反模式)。

服务层可以充当具体的存储库,它具有封装特定于您的业务需求的数据逻辑的许多好处。如果使用它,则几乎不需要在其上构建存储库(除非您希望能够更改您的后端服务技术,例如从WCF更改为WebApi或其他。)

我会将所有数据访问权限放入您的服务层。不要在 Controller 中进行数据访问。那会将您的数据层泄漏到您的UI层中,这只是糟糕的设计。它违反了许多核心SOLID概念。

但是在大多数情况下,除非您的应用程序非常复杂并且打算在多个环境中工作,否则您不需要额外的UnitOfWork或除此以外的其他层。

10-06 13:15
查看更多