20|值对象(下):值对象和实体的本质区别是什么?
UML 的两个知识点
属性和关联的等价性
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了领域建模中值对象和实体的本质区别,强调了理解值对象和实体之间的一对多关系的重要性。文章通过讨论UML的两个知识点,解决了如何在领域模型中表示值对象的问题。在实践中,建议在领域模型图里,实体之间的关系用关联来表达,而实体和值对象之间的关系用属性来表达。值对象可以用<<value>>衍型来标识,对于可枚举的值对象,还可以采用UML专门的枚举衍型来表达。实体和值对象的本质区别在于,实体是人通过感官可以感觉到的客观存在的事物,或者以存在的事物为蓝本想象出来的事物;而值对象是为了描述事物,由人抽象出来的纯粹概念。讨论值对象的变化是没有意义的。文章还留下了两道思考题,引发读者深入思考。
《手把手教你落地 DDD》,新⼈⾸单¥59
全部留言(14)
- 最新
- 精选
- 赵晏龙1.值对象还在Domain范围,DTO属于应用范围,风马牛不相及。 2.我觉得有必要,但问的方式应该更加通俗,比如说,A1 A2中有个B属性,A1的B变了A2是否应该跟着变?至于理解是否值对象,实际应用中业务方的学习成本会较高。
作者回复: 嗯,没错
2023-02-08归属地:湖南6 - 神经蛙牛逼这钱值 比另外一门ddd好多了
作者回复: 谢谢鼓励!
2023-03-03归属地:广东24 - Jxin内容: 1.巧了,我画领域模型图也会有值对象的缩写。不过我的应用场景是分阶段的,早期可研阶段领域模型的重心是与产品沟通对齐,所以以突出核心模型为主,把其他分支全部隐在属性里。模型的意义是突出重心隐藏复杂。都后面软件建设,要重新划,这个时候是承接上层知识和约束并指导后续软件实现。 2.对于值对象和实体的描述,说得很对。我没在这种维度和团队成员探讨过,如果有实践经验,希望能补充下。我觉得对这块的描述很多说法都对,但关键的还是得看有没有用。这个说法能方便我团队间知识传递吗?这个说法能更好的指导编码实现吗?如果不行,那就只是对。 课后题: 1.反过来可以说是,从本章的内容来看。但没有用,区分dto是否值对象对我实现业务逻辑无帮助。因为如果我的业务逻辑直接依赖dto那本身就是种坏味道。而不依赖,只是传输数据的载体,那管他是啥呢,无所谓。 2.可以,但不建议。能聊沟通信息的厚度能有很大提升,对长期协作有帮助。但对人员的要求太高了,都是流水的兵,这种要求其实也是对特定人的一种高耦合,管理角度看这是一种不稳定。更何况还有干外包的,打一枪放一炮的,还能要求客户水平得如何?
作者回复: 问题1,值对象其实不是DTO。DTO只负责传输数据,没有业务逻辑,不属于领域对象层面。值对象是领域层面,往往包含业务逻辑。 问题2,一般不和业务人员直接谈值对象。
2023-01-28归属地:山东24 - 酱油丹老师,请教一个问题,按这节课的讲述,工作经验其实也可以认为是值对象?理由如下: 1. 无单独的标识,其所有的属性集合就是自身的标识 2. 也是一个抽象的概念,并不是一个客观存在的事物
作者回复: 有时候两种观点都可以,取决于理解的角度。为了说得更明白,不妨给工作经验再加一个字符串型的字段“工作经验描述”,用来说明这段工作经验里取得了什么成绩。 这时候,第一种理解是,人员、公司、时间段组成了唯一标识,而“工作经验描述”可以修改,这时候,工作经验是实体。 第二种理解,所有字段都不可修改,如果要修改工作经验描述的话,则替换整个对象。这时候可以理解为值对象。准确的说,这个值对象是该员工某个工作经验信息的“快照”。 两种理解都可以,看你的权衡。
2023-03-29归属地:广东22 - 龙腾1、DTO好像没有严格定义里面有哪些数据吧,可能是实体也可以是一些零碎的属性,或者是实体和一些其他属性的组合。 2、我觉得一般不用刻意强调,对于实体和值对象的基本概念本来就存在于每个人的大脑中。在构建技术模型和实现时可以根据需要加以区分。
作者回复: 关于第一问,值对象要处理领域逻辑,DTO只是数据传输。第二问非常到位👍🏻
2023-01-22归属地:河北2 - tt我觉得值对象不完全是DTO,因为DTO也可以对应客观存在的事物,或者以存在的事物为蓝本想象出来的事物,只是它不需要有逻辑,所以只剩下了属性。
作者回复: 是的,值对象通常有业务逻辑,DTO主要负责数据传输,不是业务概念,没有业务逻辑
2023-01-19归属地:北京2 - 末日,成欢老师,读书有一点困惑的地方 我之前对实体的理解是存在唯一标识,并且唯一标识在整个生命周期内不可变,实体的其他属性对于实体来说不重要,是可变的 但是书里说的是ENTITY可以是任何事物,只要满足两个条件即可, 一是它在整个生命周期中具有连续性,这个连续性想要说什么? 书里说的这句话没有前后文,没理解。 还有5.2.1ENTITY最基本的职责是确保连续性,以便使其行为更清楚且可预测 这里的连续性说明的是什么? 麻烦老师解惑下
作者回复: 我们在微信群里聊过了,再贴一遍: 实体的“连续性”是相对值对象的“不连续性”来说的。两者要比照着理解。先说实体,比如人是实体,张三人这个实体的一个实例。人有身高体重等属性。张三的体重昨天60公斤,今天变成61公斤,也就是体重属性变了,但张三还是张三,并没有变成另一个人,所以说张三(这个实体)具有连续性。另一方面,“重量”是值对象,“5公斤”是重量这个值对象的一个实例,具有两个属性,一个是数值,另一个是重量单位。假如如果5公斤变成6公斤,也就是说数值属性变了,那么6公斤还是原来那个值对象(5公斤)吗?不是了,6公斤是一个新对象。所以说,值对象不具有“连续性”。只要任何一个属性“变”了(其实本质上来说“值对象的属性会变”是一个伪命题),就是另一个值对象了。
2023-09-16归属地:陕西1 - plimlips1.DTO不是值对象,他是技术对象,是领域模型和计算机环境的映射 2.分类一般不用强调,但要把这两种对象都分析出来,分类是有助于领域模型落地的
作者回复: 回答得非常好,您之前应该对DDD有过研究吧?
2023-01-25归属地:重庆21 - aoe第一个问题本来觉得是一样的,大家都可以是不可变的数据,这不一样吗?但看了老师的答案后才明白: 值对象要处理领域逻辑,DTO 只是数据传输 看来实体、值对象的共同点是:都可以处理领域逻辑
作者回复: 是的,因为实体和值对象都是“领域对象”,在领域模型图中可以出现。而DTO不是领域对象,在领域模型中不能出现。
2023-01-25归属地:浙江1 - 神经蛙只对象度量了实体的某个属性,把不同相关的属性组成了一个概念整体
作者回复: 嗯嗯,组成概念整体的值对象就是“复合值对象”
2023-03-03归属地:广东