1

考虑一下我的模型,它由两个聚合根CustomerOrder一个“共享”实体组成Address

另请注意,Addressabstract具有以下子类PhysicalAddressPostOfficeBoxAddressPrivateBagAddress

ACustomer可以将许多地址组织成某种地址簿。下订单后,客户Address将从他们的地址簿中选择一个用作送货地址。

我最初的想法是在两个实体之间共享一个地址,但后来我选择了退出,因为这会给管理各自的不变量带来麻烦。

我可以选择的另一个选择是创建两个层次结构Address,每个层次结构都用作客户地址或送货地址。这似乎也不对,因为有很多重复的代码。

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

4

1 回答 1

2

实体是应该能够自行存在的东西,例如客户或订单。但是,地址不是实体,地址是值类型,不能单独存在,因此:

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

我们发现我们一直都会遇到这些类型的实体,例如 Address、MoneyType 等。

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

于 2012-10-11T15:24:14.113 回答