【问题标题】:DDD: what's the use of the difference between entities and value objects?DDD:实体和值对象的区别有什么用?
【发布时间】:2010-12-19 14:44:06
【问题描述】:

实体和值对象都是领域对象。在 DDD 中知道两者的区别有什么用?例如,将域对象视为实体或值对象是否会促进更清晰的域模型?

【问题讨论】:

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


    【解决方案1】:

    是的,能够区分差异非常有帮助,尤其是在您设计和实现类型时。

    主要区别之一是在处理平等时,因为实体应该具有与值对象完全不同的行为。知道你的对象是实体还是值对象告诉你应该如何实现类型的相等性。这本身很有帮助,但不止于此。

    实体是可变类型(至少在概念上是这样)。实体背后的整个想法是,它代表一个具有已知生命周期进程的域概念(即它被创建,它经历了几次转换,它被归档并可能最终被删除)。它代表相同的特定“事物”,即使经过数月或数年,它也会在此过程中改变状态。

    另一方面,值对象只是表示没有任何固有标识的值。尽管您不必这样做,但它们非常适合作为不可变类型实现。这很有趣,因为根据定义,任何不可变类型都是线程安全的。随着我们进入多核时代,知道何时将对象实现为不可变类型非常有价值。

    当相等语义众所周知时,它在单元测试中也有很大帮助。在这两种情况下,平等都是明确定义的。我不知道您使用什么语言,但在许多语言(C#、Java、VB.NET)中,相等性默认由引用确定,这在很多情况下并不是特别有用。

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 2011-02-02
      • 2020-10-04
      相关资源
      最近更新 更多