DDD:不可变对象也可以是实体吗?

bck*_*rld 7 domain-driven-design

我已经阅读了关于实体和价值对象之间差异的无数帖子,虽然我认为至少在概念上我理解这两者有何不同,但似乎在某些帖子中作者认为特定的域概念仅仅是因为它是不可变的(因此它的状态永远不会改变,至少在那个特定的领域模型中).

您是否同意如果对象的状态永远不会在特定域模型中更改,那么此对象永远不应该是实体?为什么?

谢谢

gui*_*e31 6

您是否同意如果对象的状态永远不会在特定域模型中更改,那么此对象永远不应该是实体?为什么?

我会说90%以上的实体会在其生命周期的某个时刻发生变化.但是一些实体可能是不可更改的,因为它们在域中的性质 - 例如PrepaidPhoneCard,TransferOrder在银行系统中.

有些人还希望默认情况下使其实体不可变,因为它有助于塑造保留不变量的设计并使域操作显式化:http://www.jefclaes.be/2013/04/designing-entities-immutability-first.html


Yug*_*hou 5

如果您需要识别它,该对象可以是一个实体。根据 DDD 一书,如果一个对象具有标识和生命周期,但不会随着时间的推移而改变,那么您也可以将该对象视为一个事件。

  • @bckpwrld Evan 的书,如果我没记错的话。事件在当时并不是一个明确的概念。提到的例子是一个支付,每个支付都有一个序列作为它的身份。而在他的 dddsample 项目中,我记得HandlingEvent 实现了DomainEvent。 (2认同)