问题 在DDD中,价值对象的实际优势是什么?


到目前为止,我已经知道实体对象具有ID,而值对象没有,但在最常见的示例中,您具有附加了地址值对象的person实体。创建单独的地址对象而不是仅仅保留Person实体中的地址属性有什么大的优势?


11636
2018-02-28 22:48


起源



答案:


除了已经提到的东西, 格雷格杨 因为它们是不可变的,所以你可以在创建时验证它们并且再也不用担心验证了。如果状态无法更改,那么您知道它始终有效。


9
2018-04-18 05:23



最后找到了一个很好的理由,为什么不变性是值得的。 “这可以防止奇怪的行为”借口之前并没有说服我。 - Arnis Lapsa
Roger Alsing的答案在这里 stackoverflow.com/questions/4581579/... 刚照亮了我头上最大的灯泡。


答案:


除了已经提到的东西, 格雷格杨 因为它们是不可变的,所以你可以在创建时验证它们并且再也不用担心验证了。如果状态无法更改,那么您知道它始终有效。


9
2018-04-18 05:23



最后找到了一个很好的理由,为什么不变性是值得的。 “这可以防止奇怪的行为”借口之前并没有说服我。 - Arnis Lapsa
Roger Alsing的答案在这里 stackoverflow.com/questions/4581579/... 刚照亮了我头上最大的灯泡。


  • 值对象可以用作其他类中其他方法的参数
  • 它可以使您的设计更清晰
  • 它可能有助于性能优化(例如:飞重模式)
  • 值对象可以在不同的实体中重用。 (例如:具有地址值对象的用户和位置实体。

不要忘记“没有id”并不是值对象和实体之间的唯一区别,不可变也是非常重要的。


5
2018-02-28 23:00





将其视为可重用的组件。您可以将它变成家庭住址,工作地址而无需额外的努力。您可以使用它将其他系统与人员实体分离。假设您介绍一个商业实体。它也会有一个地址。

与此主题相关的是另一个重要主题:构成与继承


1
2018-02-28 22:58