我有一个这样的项目结构:
Here, IApplicationDbContext.cs
接口定义在Application
层及其实现是在Infrastructure
层。类似地,对于名为“IRepository”的通用存储库
我对在哪里实施特定存储库有疑问?在这种情况下,我有IProductRepository
定义在Application
层。那么,我应该在哪里实现这个功能呢?在里面Application Layer
本身?或在Infrastructure Layer
?
请指导。
存储库实施
The Infrastructural Layer
应用程序的外观代表使其能够运行的技术细节。它负责存储域对象状态信息的技术实现。
So the Repository implementation
属于Infrastructure Layer
因为他们处理存储,这不是责任
该模型应该采用。它通常由持久性框架支持来完成繁重的工作。特定存储库必须在Infrastructure Layer
.
存储库合约
根据DDDRepository contract
应定义在Domain Layer
所有域对象旁边。高层模块不应该依赖于低层模块。两者都应该依赖于抽象。抽象不应该依赖于细节。细节应该取决于抽象。基于这个规则,我们不能定义存储库接口Infrastructure layer
。存储库也可以用于Domain Layer
在这种情况下,我们不能定义合同Application Layer
。
存储库是领域模型和持久性之间的契约。它应该只根据域来编写,而不考虑底层的持久性。存储库的契约不仅仅是一个 CRUD 接口。它是领域模型的扩展,并以领域专家理解的术语编写。您的存储库应该根据应用程序用例的需求构建,而不是从类似 CRUD 的数据访问角度构建。
在分层架构中哪里定义存储库的接口?
领域驱动设计实施指南
存储库客户端
一个典型的客户Repository
is the Application Service Layer
.
Domain Services
也可以使用存储库。
参考:
Vaughn Vernon - 实施领域驱动设计
领域驱动设计的模式、原则和实践第一版
通过斯科特·米利特
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)