知识卡片
实体与值对象的区分取决于是否需管理生命周期
内容
识别聚合先梳理对象图、确定各对象是实体还是值对象。容易识别的值对象先标(体现单位、枚举、类型的内聚概念);容易识别的实体也提前标(在业务服务中扮演主要作用、有清晰生命周期特征)。关键判据是”是否需要单独管理生命周期”:ProgramOwner/Coordinator/Nominee/Trainee虽定义了ID,但在培训上下文中只是主实体的属性值、不需管理生命周期,应为值对象;Teacher因培训上下文不单独维护教师信息、定义为值对象;Filter/ValidDate看似有值对象特征(属性相同即同一对象),但因生命周期需单独管理而更适合定义为实体;TicketAction差异仅在活动内容、不需管理生命周期,定义为值对象。发散:ID的有无不是实体/值对象的判据——”要不要独立追踪它的生死”才是;同一个概念在不同上下文可能是实体也可能是值对象。
参考来源
- 位置:《解构领域驱动设计》第20章 20.3.4(源文件:_epub-src/OEBPS/033.xhtml)
- 结论依据:原文以培训上下文多个对象为例,以是否需管理生命周期区分实体与值对象。
- 原始内容:因此,这些领域模型类虽然定义了ID,但在培训上下文中不过是其主实体的一个属性值而已,并不需要管理它们的生命周期,应该定义为值对象。