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