在领域驱动设计(DDD)中,价值对象的实际优势是什么?

16

我理解,实体对象具有ID而值对象没有,但在最常见的例子中,你会发现人员实体与地址值对象相关联。相对于将地址属性保留在人员实体中,创建单独的地址对象有何优势呢?

3个回答

14

除了已经提到的内容外,Greg Young 强调不可变对象的重要性在于可以在创建时验证并永远不用担心验证问题。如果状态不可更改,那么你就知道它始终是有效的。


5
终于找到一个很好的理由来证明不变性是有价值的。之前,“它可以防止出现奇怪的行为”这个借口并没有让我信服。 - Arnis Lapsa
2
Roger Alsing在这里的回答https://dev59.com/1m455IYBdhLWcg3wCPbh 让我脑中的灯泡亮起来了。 - user74754

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

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


3

把它看作是一个可重复使用的组件。你可以很容易地将其制作成家庭地址、工作地址等。你可以使用它来解耦其他系统与个人实体之间的关系。比如,你引入了一个企业实体。它也会有一个地址。

与此主题相关的另一个重要主题是:组合 vs. 继承。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接