1

考虑一下由两个聚合体根CustomerOrder以及“共享”实体Address组成的模型。需要共享实体的聚合体

还要注意的是Addressabstract具有以下子类:PhysicalAddressPostOfficeBoxAddressPrivateBagAddress

A Customer可以将许多地址组织成某种地址簿。 订购时,顾客将从他们的地址簿中选择一个Address作为送货地址。

我最初的想法是在这两个实体之间分享一个地址,但后来我选择了它,因为它会导致管理各自的不变量时出现问题。

我可以去的另一个选择是创建Address的两个层次结构,每个层次都是作为客户地址或送货地址。由于有很多重复的代码,这再次显得不正确。

我该如何正确模拟这种情况?

回答

2

实体是应该能够通过客户或订单等自身存在的东西。然而,一个地址是不是一个实体,一个地址是值类型,不能自行因此存在:

  1. 一个地址只能存在作为被实体之内聚集
  2. 您可以定义值类型的地址层次结构作为您的域中的值类型,但许多实体可能会使用它。

,我们发现我们遇到这些类型的实体所有的时间,如地址,MoneyType等

解决方案将是您的域中创建1个地址层次值类型。然后,任何实体可以在适用的情况下将地址作为属性

+0

感谢您的回答,但看起来我无法使用我的ORM框架JPA实现此功能。问题在于@Embeddable(value对象)无法使用继承。我将不得不寻找另一种解决方案。 –