我目前正在确定系统中的实体,值对象和聚合。下面要说的实体已经确定:聚合和值对象:删除?
客户,CustomerEmail,电子邮件,CustomerAddress,地址,地址类型
而客户 - >电子邮件是一个多对多的关系,因为是客户 - >地址(含地址类型)。这些关系由CustomerAddress和CustomerEmail关系对象表示。
起初我以为这是直截了当:
实体:客户,CustomerEmail,CustomerAddress 值对象:电子邮件,地址,地址类型
与客户是包含所有实体的集合的总根源和VO的上面。
我有这个问题(当我向前推进时,这可能只是因为我正在了解聚合的概念)假设您有一个供应商实体使用相同的地址和电子邮件值对象来反映上述客户聚合。在这种情况下,当客户被删除时,地址和电子邮件不应该被删除,作为供应商,甚至另一个客户可能仍然在引用它们。我见过很多文档,说明何时删除聚合,聚合边界内的所有内容都会一次全部删除。我是否正确地认为这不适用于价值对象的总和(即它们是不可变的......如果我们在车辆集合中有一个颜色对象为绿色......您不会仅仅因为一辆汽车而删除颜色被删除),或者电子邮件和地址是否存在自己的实体(和聚合体)作为两个地址,即使它们可能具有相同的属性,也是实际的单独身份(即一个是供应商地址,另一个是客户地址?)如果它们确实是Value Objects,那么如果VO只能通过它们的聚合根进行操作,那么如何去处理它们应该被删除的情况(没有供应商或客户仍然引用地址)?
干杯,
史蒂夫