作者回复: 嗯,没错
作者回复: 问题1,值对象其实不是DTO。DTO只负责传输数据,没有业务逻辑,不属于领域对象层面。值对象是领域层面,往往包含业务逻辑。 问题2,一般不和业务人员直接谈值对象。
作者回复: 谢谢鼓励!
作者回复: 关于第一问,值对象要处理领域逻辑,DTO只是数据传输。第二问非常到位👍🏻
作者回复: 是的,值对象通常有业务逻辑,DTO主要负责数据传输,不是业务概念,没有业务逻辑
作者回复: 回答得非常好,您之前应该对DDD有过研究吧?
作者回复: 是的,因为实体和值对象都是“领域对象”,在领域模型图中可以出现。而DTO不是领域对象,在领域模型中不能出现。
作者回复: 我们在微信群里聊过了,再贴一遍: 实体的“连续性”是相对值对象的“不连续性”来说的。两者要比照着理解。先说实体,比如人是实体,张三人这个实体的一个实例。人有身高体重等属性。张三的体重昨天60公斤,今天变成61公斤,也就是体重属性变了,但张三还是张三,并没有变成另一个人,所以说张三(这个实体)具有连续性。另一方面,“重量”是值对象,“5公斤”是重量这个值对象的一个实例,具有两个属性,一个是数值,另一个是重量单位。假如如果5公斤变成6公斤,也就是说数值属性变了,那么6公斤还是原来那个值对象(5公斤)吗?不是了,6公斤是一个新对象。所以说,值对象不具有“连续性”。只要任何一个属性“变”了(其实本质上来说“值对象的属性会变”是一个伪命题),就是另一个值对象了。
作者回复: 有时候两种观点都可以,取决于理解的角度。为了说得更明白,不妨给工作经验再加一个字符串型的字段“工作经验描述”,用来说明这段工作经验里取得了什么成绩。 这时候,第一种理解是,人员、公司、时间段组成了唯一标识,而“工作经验描述”可以修改,这时候,工作经验是实体。 第二种理解,所有字段都不可修改,如果要修改工作经验描述的话,则替换整个对象。这时候可以理解为值对象。准确的说,这个值对象是该员工某个工作经验信息的“快照”。 两种理解都可以,看你的权衡。
作者回复: 嗯嗯,组成概念整体的值对象就是“复合值对象”