知识卡片

实体的核心特征:唯一标识符与延续性

普通读书笔记卡

内容

DDD领域模型中有一类对象拥有唯一标识符,这个标识符在对象历经各种状态变更后仍能保持一致——对这类对象而言,重要的不是它当下的属性值,而是它的延续性和身份标识,这种延续性和标识甚至会跨越软件的生命周期,这就是实体。一个实体对象可以被多次修改,修改后的数据可能和原来的数据大不相同,但只要ID相同,它依然被认为是同一个实体——比如商品是商品限界上下文的一个实体,通过唯一商品ID标识,不管商品数据(价格、库存、描述等)如何变化,商品ID始终不变,它始终是同一个商品。实体在DDD不同阶段呈现不同形态:在战略设计阶段是携带业务属性和行为的业务对象;在代码模型里表现为实体类,DDD更倾向采用”充血模型”——业务逻辑都写在实体类的方法里,而不是像贫血模型那样把逻辑抽离到单独的业务逻辑层;在运行态以领域对象(DO)形式存在,每个实体都有唯一ID;持久化到数据库时会转换为持久化对象(PO),一个实体和持久化对象之间可能是一对一、一对多或多对一的关系,不总是简单的一一对应。

参考来源

- 位置:《中台架构与实现:基于DDD和微服务》第7章《实体和值对象:领域模型的基础单元》"7.1 实体"(源文件:_epub-src/OEBPS/Text/chapter3-3-1.xhtml) - 结论依据:原文说明"在DDD的领域模型中有这样一类对象,它们拥有唯一标识符,并且它们的标识符在历经各种状态变更后仍能保持一致。对这些对象而言,重要的不是属性,而是其延续性和标识……比如商品是商品限界上下文的一个实体,通过唯一的商品ID来标识。不管这个商品的数据如何变化,商品的ID一直保持不变,所以它始终是同一个商品",直接支撑本卡片结论。 - 原始内容:在DDD的领域模型中有这样一类对象,它们拥有唯一标识符,并且它们的标识符在历经各种状态变更后仍能保持一致。对这些对象而言,重要的不是属性,而是其延续性和标识,这种对象的延续性和标识会跨越甚至超出软件的生命周期。