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

Domain driven design 在DDD中,价值对象的实际优势是什么?,domain-driven-design,entities,value-objects,Domain Driven Design,Entities,Value Objects,到目前为止,我了解到实体对象有一个ID,而值对象没有,但在最常见的示例中,您有一个person实体,它附带了一个address-value对象。创建一个单独的address对象而不仅仅是将address属性保存在Person实体中的最大优势是什么?将其视为一个可重用的组件。你可以把它变成家庭住址,工作住址,而无需付出太多额外的努力。您可以使用它将其他系统与person实体分离。假设你介绍了一个商业实体。它还将有一个地址 与这个主题相关的是另一个重要主题:构图与继承 值对象可以用作其他类中其他方法

到目前为止,我了解到实体对象有一个ID,而值对象没有,但在最常见的示例中,您有一个person实体,它附带了一个address-value对象。创建一个单独的address对象而不仅仅是将address属性保存在Person实体中的最大优势是什么?

将其视为一个可重用的组件。你可以把它变成家庭住址,工作住址,而无需付出太多额外的努力。您可以使用它将其他系统与person实体分离。假设你介绍了一个商业实体。它还将有一个地址

与这个主题相关的是另一个重要主题:构图与继承
  • 值对象可以用作其他类中其他方法的参数
  • 它可以让你的设计更清晰
  • 它可能有助于性能优化(例如:飞行重量模式)
  • 值对象可以在不同的实体中重用。(例如:具有地址值对象的用户和位置实体

  • 别忘了“没有身份证”不可变不是值对象和实体之间的唯一区别,不可变也是非常重要的。

    除了前面提到的事情之外,由于它们是不可变的,您可以在创建时验证它们,而不再担心验证。如果状态无法更改,那么您知道这是很重要的这是有道理的。

    终于找到了不变性有价值的一个很好的理由。“它可以防止奇怪的行为”这个借口以前并没有说服我。罗杰·阿尔辛的回答在这里点燃了我头脑中有史以来最大的灯泡。