2009-11-23 160 views

回答

9

是的,这是能够分辨出来,特别是当你在设计和实现你的类型非常有帮助。

一个主要的区别是,当涉及到处理平等,因为实体应该比值对象完全不同的行为。知道你的对象是一个实体还是一个值对象告诉你如何实现类型的平等。这本身是有用的,但它并不止于此。

实体是可变类型(至少通过概念)。实体背后的全部理念是它代表了一个具有已知生命进程的域概念(即它被创建,它经历了几次转换,它被存档并可能最终被删除)。它代表即使经过数月或数年,同样特定的'事物',并且它沿途改变状态。

值对象另一方面只是表示没有任何固有标识的值。虽然你不必这样做,但它们非常适合作为不可变类型来实现。这非常有趣,因为任何不可变类型都是线性安全的。当我们进入多核时代时,知道何时将对象实现为不可变类型非常有价值。

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

相关问题