![]() |
1
9
是的,能够分辨出不同之处是非常有帮助的,尤其是在设计和实现类型时。 其中一个主要的区别是在处理平等问题时,实体的行为应该与值对象有很大的不同。知道对象是实体还是值对象会告诉您如何实现类型的相等性。这本身是有帮助的,但不会就此止步。 实体是可变类型(至少按概念)。实体背后的整个想法是,它代表了一个具有已知生命周期进程的域概念(即,它被创建,经过多次转换,被存档,可能最终被删除)。它代表 同样的“东西” 即使数月或数年过去了,它也会改变一路上的状态。 另一方面,值对象只是表示没有任何固有特性的值。尽管您不必这样做,但它们非常适合作为不可变类型实现。这非常有趣,因为根据定义,任何不可变类型都是线程安全的。随着我们进入多核时代,知道何时将对象实现为不可变类型是非常有价值的。 当等式语义众所周知时,它也有助于单元测试。在这两种情况下,平等的定义都很明确。我不知道你使用什么语言,但是在很多语言中(C语言,Java,VB.NET)默认是通过引用来确定相等性的,这在很多情况下并不是特别有用。 |
![]() |
astef · 为没有字段的值对象重写GetHashCode() 10 年前 |