假设我们有3个聚合:
- 为("orders"包) 客户
- ("customers"包) 产品
- ("products"包)
我现在要做的是连接所有这些聚合在"Entity"使用JPA/Hibernate。但是实体可访问性的另一个问题来了(它们必须是公共的)。在类似的情况下我该怎么做?
您至少有3个选项。
让持久性信息分散到域实体中,这样您就有了持久性实体和域实体之间的完全重叠。这也意味着,当没有简单的处理方法时,您必须使域适应持久性约束。例如,你管理一对多关系的方式。而且,正如您注意到的,您还需要将它们设为公共。
另一个选项是使用具有持久性信息的类扩展域实体。这是可行的(我曾经这样做过一次),但是当这个领域以意想不到的方式发展时,它就会变得一团糟。
另一种选择是分割域和持久性实体。因此,包中存在的第一个组件应该位于基础设施层之下,而其他组件则位于另一个包中,位于域层之下。通过这种方式,您可以隐藏所有域函数(以及其他所有内容),并仅发布构建实体所需的内容(例如构建器)。另一方面,所有持久性细节都留在域之外。但是,您需要一种将域实体转换为持久性实体的方法,反之亦然。这是额外的工作,但好处是你可以测试每一个单独的东西,一旦它工作,它就会一直工作。
最后,在现实世界中,您需要放松某些方面以使域适应您的基础结构需求/约束。