使用DDD方法的域层和DAO层

时间:2012-05-01 15:30:21

标签: java jpa domain-driven-design

根据许多程序员的说法,使用JPA时可以绕过DAO层。

在使用DDD方法时,域层由基础架构区域(包含外部资源,如存储库实现)和域区域(包含实体,所需的值对象和存储库接口和服务等...)。

因此,如果跳过DOA层,那么基础设施区域应该是名为“基础设施”的包中的域层的一部分吗?

如果基础设施部分应该在一个单独的层中移动(分离的项目以使事情变得更清洁),那么域层和基础层之间是否可以接受循环依赖?实际上,实体和接口存储库必须共享

否则,我是否应该从Domain层分离实体和存储库接口,以便被视为域和基础架构共享的独立事物?

什么是好的做法?

2 个答案:

答案 0 :(得分:1)

DAO层和基础设施区域/域区域不是一回事。实现基础架构/域区域时使用DAO层。

您的程序员是正确的,JPA是DAO层。您仍然需要基础结构区域和域区域。如果你必须在这两个区域内实现DAO层,它们只会更小/不同。

答案 1 :(得分:1)

在DDD中,数据访问对象(DAO)是存储库。没有" DAO层",持久性是基础设施层的一部分。

正如您所提到的,存储库的合同(接口)在域层中定义,而其具体实现位于Infrastructure层。

域层不需要引用基础架构,因为实体应该是纯域对象,不知道它们如何被持久化,传输到其他系统等等。

  

"换句话说,每个层都使用一个抽象接口   代表它的基础设施需求。它不知道是什么   它将使用的基础设施。它简单地说明了它的需求   一个抽象的接口,并期望基础设施实现它   接口并提供所需的功能。"

http://www.artima.com/weblogs/viewpost.jsp?thread=35139