我在EF 4中使用UnitOfWork模式,只是想知道EFUnitOfWork的实现应该在哪里生效?它应该存在于存储库层吗?我在Domain Layer中拥有所有接口。这听起来不错吗?
我正在使用Ninject通过IUnitOfWork注入存储库。
我想这真的没关系,因为你不打算真正测试你的EF特定存储库吗?
另一个选择是让它存在于EF模型和上下文所在的数据层中。
通过将其放在Repository Layer中,该层现在需要对System.Data.Entity的引用。不好还是好吗?
答案 0 :(得分:1)
在DDD之后,您通常需要在解决方案中使用ProjectName.Core项目。该项目的结构如下:
ProjectName.Core - >存储库(全部 您的存储库接口)
ProjectName.Core - >的DomainModel
ProjectName.Core - >基础设施 - > IUnitOfWork(uow interface)
ProjectName.Core - >基础设施 - > DtatAccess(存储库实现和所有 数据库相关文件包括uow实现)
有时如果项目足够大,我会在我的解决方案中添加一个名为ProjectName.Infrastructure.DataAccess的项目,并将所有DataAccess实现放在该项目中。
答案 1 :(得分:0)
出于可读性/理解的原因,通常实现位于Repository层。我发现在域层中使用接口没有任何问题。
您甚至可以使用类似下面的内容
- Domain
->Interfaces
->Repository
-> Actual Implementation
然而正如你所说,实际实现的位置并不重要。但是,如果您正确组织结构,其他人也很容易理解流程。