根据许多程序员的说法,使用JPA时可以绕过DAO层。
在使用DDD方法时,域层由基础架构区域(包含外部资源,如存储库实现)和域区域(包含实体,所需的值对象和存储库接口和服务等...)。
因此,如果跳过DOA层,那么基础设施区域应该是名为“基础设施”的包中的域层的一部分吗?
如果基础设施部分应该在一个单独的层中移动(分离的项目以使事情变得更清洁),那么域层和基础层之间是否可以接受循环依赖?实际上,实体和接口存储库必须共享。
否则,我是否应该从Domain层分离实体和存储库接口,以便被视为域和基础架构共享的独立事物?
什么是好的做法?
答案 0 :(得分:1)
DAO层和基础设施区域/域区域不是一回事。实现基础架构/域区域时使用DAO层。
您的程序员是正确的,JPA是DAO层。您仍然需要基础结构区域和域区域。如果你必须在这两个区域内实现DAO层,它们只会更小/不同。
答案 1 :(得分:1)
在DDD中,数据访问对象(DAO)是存储库。没有" DAO层",持久性是基础设施层的一部分。
正如您所提到的,存储库的合同(接口)在域层中定义,而其具体实现位于Infrastructure层。
域层不需要引用基础架构,因为实体应该是纯域对象,不知道它们如何被持久化,传输到其他系统等等。
"换句话说,每个层都使用一个抽象接口 代表它的基础设施需求。它不知道是什么 它将使用的基础设施。它简单地说明了它的需求 一个抽象的接口,并期望基础设施实现它 接口并提供所需的功能。"