【问题标题】:DDD - entity vs package-by-featureDDD - 实体与按功能打包
【发布时间】:2021-10-16 16:33:00
【问题描述】:

假设我们有 3 个聚合:

  • 订单(“订单”包)
  • 客户(“客户”包)
  • 产品(“产品”包)

我现在要做的是使用 JPA/Hibernate 在“实体”级别连接所有这些聚合。但是实体可访问性出现了另一个问题(它们必须是公共的)。遇到类似情况该怎么办?

【问题讨论】:

  • 问题很有趣,但问题的名称与内容不匹配

标签: java architecture package domain-driven-design


【解决方案1】:

您至少有 3 个选项。

让持久性信息传播到域实体中,因此持久性实体和域实体之间完全重叠。这也意味着,当没有简单的方法来处理它时,您必须使域适应持久性约束。例如,您管理一对多关系的方式。而且,正如您所指出的,您还需要将它们公开。

另一种选择是使用具有持久性信息的类来扩展域实体。这是可行的(我曾经做过一次),但是当域以意想不到的方式增长时,它就会变得一团糟。

另一种选择是拆分域和持久性实体。所以你有第一个存在于一个包中的,应该放在基础设施层下,而其他的则留在另一个包中,不服务于域层。通过这种方式,您可以隐藏所有域函数(kwnd 其他所有内容)并仅发布构建实体(例如构建器)所需的内容。另一方面,所有持久性细节都留在域之外。但是,您需要一种将域实体转换为持久性实体的方法,反之亦然。这是一项额外的工作,但好处是您可以测试每一件事,一旦成功,它就会一直有效。

最后,在现实世界中,您需要放松某些方面,以使域适应您的基础架构要求/约束​​。

【讨论】:

    猜你喜欢
    • 2021-10-31
    • 2020-08-09
    • 1970-01-01
    • 2019-08-10
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2010-10-04
    相关资源
    最近更新 更多