Domain driven design DDD:不可变对象也可以是实体吗? 我读过无数篇关于实体和价值对象之间差异的文章,虽然我认为至少在概念上我理解这两个概念是如何不同的,但是在一些文章中,作者认为一个特定的领域概念仅仅是VO,因为它是不可变的。(因此,它的状态永远不会改变,至少在特定的域模型中是如此)
您是否同意如果一个对象的状态在特定的域模型中永远不会改变,那么这个对象就永远不应该是一个实体?为什么Domain driven design DDD:不可变对象也可以是实体吗? 我读过无数篇关于实体和价值对象之间差异的文章,虽然我认为至少在概念上我理解这两个概念是如何不同的,但是在一些文章中,作者认为一个特定的领域概念仅仅是VO,因为它是不可变的。(因此,它的状态永远不会改变,至少在特定的域模型中是如此),domain-driven-design,Domain Driven Design,您是否同意如果一个对象的状态在特定的域模型中永远不会改变,那么这个对象就永远不应该是一个实体?为什么 谢谢如果需要标识,对象可以是实体。 根据DDD书,如果一个对象具有身份和生命周期,但不会随着时间的推移而改变,你也可以把这个对象看作一个事件。 你是否同意如果一个物体的状态永远不会改变 特定的域模型,那么这个对象永远不应该是一个实体? 为什么? 我想说,90%以上的实体在其生命周期中的某个时刻会发生变化。但有些实体可能是不可改变的,因为它们在该领域的性质——例如银行系统中的prepaid电话卡、
谢谢如果需要标识,对象可以是实体。 根据DDD书,如果一个对象具有身份和生命周期,但不会随着时间的推移而改变,你也可以把这个对象看作一个事件。 你是否同意如果一个物体的状态永远不会改变 特定的域模型,那么这个对象永远不应该是一个实体? 为什么? 我想说,90%以上的实体在其生命周期中的某个时刻会发生变化。但有些实体可能是不可改变的,因为它们在该领域的性质——例如银行系统中的
prepaid电话卡
、TransferOrder
有些人还喜欢使他们的实体在默认情况下是不可变的,因为这有助于形成一个保留不变量并使域操作显式的设计:两个字:是的,他们可以
埃里克·埃文斯(Eric Evans)在他的书中讲述了“连续性的线索”实体固有的。用外行术语来说,一个实体可以由前端发布为JSON,通过框架转换为DTO,然后转换为域对象,再转换为DTO,最后存储在数据库表中。在所有这些转换过程中,实体将很容易区分,因为它拥有一个或多个唯一的业务s ID
考虑到这一点,某些形式的不变性不是另一种连续性线程的形式吗?想象一下写时复制:所有不变性对象的副本都是形式上不同的对象,在其生命周期的不同点上表示它。然而,有一个唯一的id允许我们说它是同一个实体
现在,让我们谈谈不变性的“极端”形式:只读对象。实体可以是只读对象吗?当然,一个很好的例子是信用卡对账单
总结:
- 一个实体可以以多种形式存在。事实上,在一个程序中,您几乎总是在不知不觉中拥有实体的多个表示形式
- 实体的真正要求是存在唯一的业务标识(而不是用于技术目的的代理id),使其与其他实体区分开来
- 实体可以是不可变的,无论我们谈论的是COW还是只读对象