我目前正在确定系统中的实体、值对象和聚合。假设已识别以下实体:
客户、客户电子邮件、电子邮件、客户地址、地址、地址类型
其中客户 -> 电子邮件是多对多关系,客户 -> 地址(具有地址类型)也是如此。这些关系由 CustomerAddress 和 CustomerEmail 关系对象表示。
最初我认为这是直截了当的:
实体:Customer、CustomerEmail、CustomerAddress 值对象:Email、Address、AddressType
客户是包含上述所有实体和 VO 的聚合的聚合根。
我遇到的问题(这可能只是因为我正在学习聚合的概念)假设您有一个供应商实体,它使用相同的地址和电子邮件值对象反映上述客户聚合。在这种情况下,当客户被删除时,不应删除地址和电子邮件,因为作为供应商,甚至其他客户可能仍在引用它们。我已经看到很多文档表明,当一个聚合被删除时,聚合边界内的所有内容都会被一次性删除。我是否正确地假设这不适用于聚合中的值对象(即它们是不可变的......如果我们在车辆聚合中有一个绿色的颜色对象......你不会因为汽车而删除颜色被删除)或者电子邮件和地址是否应该有自己的实体(和聚合)作为两个地址,
最后,如果它们确实是价值对象,那么如果 VO 只能通过它们的聚合根进行操作,那么如何处理应该删除它们的情况(没有供应商或客户仍然引用地址)?
干杯,
史蒂夫