16

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

4

3 回答 3

14

除了已经提到的事情之外,Greg Young还强调了一个事实,即由于它们是不可变的,您可以在创建时验证它们,而不必再担心验证。如果状态不能改变,那么你知道它总是有效的。

于 2009-04-18T05:23:39.847 回答
6
  • 值对象可以用作其他类中其他方法的参数
  • 它可以让你的设计更清晰
  • 它可能有助于性能优化(例如:fly-weight 模式)
  • 值对象可以在不同的实体中重用。(例如:具有地址值对象的用户和位置实体。

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

于 2009-02-28T23:00:56.253 回答
2

将其视为可重用的组件。您可以毫不费力地将其变成家庭住址、工作地址。您可以使用它来将其他系统与人员实体分离。假设您介绍了一个商业实体。它也将有一个地址。

与这个主题相关的是另一个重要主题:组合与继承

于 2009-02-28T22:58:44.980 回答