首页 > 解决方案 > DDD - 实体与按功能打包

问题描述

假设,我们有 3 个聚合:

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

标签: javaarchitecturepackagedomain-driven-design

解决方案


您至少有 3 个选项。

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

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

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

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


推荐阅读