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