许多程序员认为,使用JPA时可以绕过DAO层。
在使用DDD方法时,域层由基础结构区域(包含外部资源,例如存储库实现)和域区域(具有实体,所需的值对象以及存储库接口和服务等)组成。
因此,如果跳过了DOA层,那么基础设施区域是否应成为例如称为“基础设施”的包内领域层的一部分?
如果应将基础结构部件移动到一个单独的层中(一个单独的项目以使环境更干净),那么域层和基础设施层之间的循环依赖关系是否可以接受?实际上,必须共享实体和接口存储库。
否则,我是否应该将实体和存储库接口与域层分开,以便被视为域和基础结构共享的独立事物?
有什么好的做法?
最佳答案
在DDD中,数据访问对象(DAO)是存储库。没有“ DAO层”,持久性是基础结构层的一部分。
正如您提到的,存储库的合同(接口)在域层中定义,而其具体实现位于基础结构层中。
域实体无需引用基础结构,因为实体应该是纯域对象,无需知道它们是如何持久保存的,如何转移到其他系统等等。
“换句话说,每个层使用一个抽象接口
代表它的基础架构需求。不知道是什么
它将使用的基础设施。它只是通过以下方式说明其需求
一个抽象接口,并希望基础结构实现该接口
接口并提供所需的功能。”
http://www.artima.com/weblogs/viewpost.jsp?thread=35139
关于java - 使用DDD方法的域层和DAO层,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10400007/