我的应用程序使用 SQL Server 2012、EF6、MVC 和 Web API。
它还使用存储库和各种文件,例如:
DatabaseFactory.cs
Disposable.cs
IDatabaseFactory.cs
IRepository.cs
IUnitOfWork.cs
RepositoryBase.cs
UnitOfWork.cs
我们已经在控制器和存储库之间使用了服务层
对于一些复杂的业务逻辑。我们没有计划更改为不同的数据库,并且已经指出
对我来说,最近的想法是 EF6 是一个存储库,那么为什么要构建
其上的另一个存储库和为什么我上面有所有文件.
我开始认为这是一个明智的做法。
有谁知道有没有任何例子可以实现 EF6 而无需
存储库,有服务层。我在网上搜索发现了很多
复杂的代码示例似乎毫无理由地过于复杂。
我的问题也是当使用服务层时我该放在哪里:
context = new EFDbContext()
在控制器、服务层或两者中?我读到可以通过依赖注入来做到这一点。我已经使用 Unity 作为 IOC,但我不知道如何做到这一点。
实体框架IS已经是工作单元模式实现以及通用存储库实现(DbContext 是 UoW,DbSet 是通用存储库)。我同意,在大多数应用程序中,在它们之上设计另一个 UoW 或通用存储库是一种矫枉过正的做法(此外,GenericRepsitory 被某些人认为是一种反模式)。
服务层可以充当具体的存储库,它具有封装特定于您的业务需求的数据逻辑的许多好处。如果使用它,那么几乎不需要在其上构建存储库(除非您希望能够更改后端服务技术,例如从 WCF 到 WebApi 或其他......)
我会将所有数据访问放在服务层中。不要在控制器中进行数据访问。这会将数据层泄漏到 UI 层中,这只是糟糕的设计。它违反了许多核心 SOLID 概念。
但在大多数情况下,您不需要额外的 UnitOfWork 或除此之外的其他层,除非您的应用程序非常复杂并且打算在多个环境中工作......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)