2

我读过,在大多数情况下,值对象不应该引用它们的所有者。

a)我将其解释为关联应该是单向的,只能从所有者到 VO 遍历?

b) 为什么 VO 不应该引用他们的所有者?

谢谢你

4

3 回答 3

4

值对象引用其所有者是一种代码异味,因为这表明违反了 SRP以及过度紧密的耦合。根据定义,值对象是除了保存值之外几乎不做任何事情的对象。因此它是不可变的并且没有大多数逻辑(业务逻辑、生命周期逻辑等)。

于 2013-01-28T18:44:41.300 回答
3

a)我将其解释为关联应该是单向的,只能从所有者到 VO 遍历?

是的。

b) 为什么 VO 不应该引用他们的所有者?

  • 因为不需要。值对象是简单的对象,VO 中的潜在行为通常只与它自己或它自己的类的另一个实例相关。

  • 因为值对象可以包含在多个所有者类型中,可能包含在多个聚合中。

  • 因为值对象相等是基于所有字段都相等,并且您不希望仅仅因为奇怪的 Owner 字段而将 John 的眼睛的绿色与 Laura 的眼睛的绿色视为任何不同。

  • Because bidirectional associations are discouraged (even in entities) anyway.

于 2013-01-29T09:54:05.297 回答
2

我遵循这个原则是因为我希望我的 POJO 的设计独立于使用它们的客户端,并在代码级别将其与客户端分离。这样,它们就变得便携了。

于 2013-01-28T18:45:53.377 回答