【问题标题】:Domain layer and DAO layer with DDD approach使用 DDD 方法的领域层和 DAO 层
【发布时间】:2012-05-11 02:47:24
【问题描述】:

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

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

因此,如果 DOA 层被跳过,基础设施区域是否应该成为称为“基础设施”的包中域层的一部分?

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

否则,我是否应该将实体和存储库接口与域层分开,以便被视为由域和基础设施共享的独立事物?

什么是好的做法?

【问题讨论】:

    标签: java jpa domain-driven-design


    【解决方案1】:

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

    正如您所提到的,存储库的合同(接口)是在域层中定义的,而它们的具体实现是在基础设施层中。

    领域层不需要引用基础设施,因为实体应该是纯领域对象,不知道它们是如何被持久化、转移到其他系统等等的。

    “换句话说,每一层都使用一个抽象接口, 代表它的基础设施需求。它不知道什么 它将使用的基础设施。它只是通过 一个抽象接口,并期望基础设施来实现它 接口并提供所需的功能。”

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

    【讨论】:

    • 感谢您的回答。 Spring IOC 是否适合在基础设施和其他层之间保持 DIP?
    • 当然。请参阅stackoverflow.com/questions/693221/… 最佳答案(StructureMap 是一个 IoC 容器,就像 Spring IoC 一样)。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-10-17
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      相关资源
      最近更新 更多