考虑我的情景,该模型包含两个聚合根Customer
和Order
以及“共享”实体Address
。
另请注意,Address
abstract
具有以下子类:PhysicalAddress
,PostOfficeBoxAddress
和PrivateBagAddress
。
Customer
可以将许多地址组织到某种地址簿中。
在下订单时,客户可以从他们的地址簿中选择Address
作为送货地址。
我最初的想法是在两个实体之间共享一个地址,但我已经选择退出,因为这会给管理各自的不变量带来麻烦。
我可以选择的另一个选项是创建两个Address
层次结构,每个层次结构用作客户地址或收货地址。这似乎也不正确,因为有很多重复的代码。
我如何正确地模拟这种情况?
答案 0 :(得分:2)
实体是应该能够存在的东西,例如客户或订单。但是,Address不是实体,Address是值类型,因此不能独立存在:
我们发现我们一直遇到这些类型的实体,例如Address,MoneyType等。
解决方案是在您的域中创建1个地址层次结构值类型。然后,任何实体都可以将地址作为适用的财产