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

时间:2009-02-28 22:48:08

标签: domain-driven-design entities value-objects

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

3 个答案:

答案 0 :(得分:9)

除了已经提到的内容之外,Greg Young还有很大的优势,因为它们是不可变的,你可以在创建时验证它们,而不用再担心验证。如果状态无法更改,那么您知道它始终有效。

答案 1 :(得分:5)

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

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

答案 2 :(得分:1)

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

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