使用一个实体和值对象创建aggreagte

时间:2017-09-20 11:52:05

标签: domain-driven-design

我正在努力实现实体和价值对象的概念。 我已经阅读了实体和值对象之间的差异,但我无法将知识转移到我的示例中。

我想创建一个aggreagte"零售商"

零售商具有属性" id"," name"," adress" (街道,ZIP,国家)和 GPS坐标(纬度,经度) 我的"聚合根"是有权的"零售商"。

这里的价值对象是什么,权利的属性是什么? 地址是实体的属性吗?零售商"或是"地址"一个价值对象? 是" GPS"一个值对象本身或值对象的属性"地址"?

组织这个有用的方法是什么?我在项目中添加了一个如何组织的示例。将地址添加到值对象的价值是什么,而不是将其作为属性添加到权利"零售商"?

aggregate retailer

1 个答案:

答案 0 :(得分:1)

  

这里的价值对象是什么,权利的属性是什么?地址是实体的属性吗?零售商"或是"地址"一个价值对象?是" GPS"一个值对象本身或值对象的属性"地址"?

它既是属性又是value object:属性来自面向对象的观点;从DDD的角度来看value object:带有行为的数据,不可变。

GPS应该是包含latitudelongitude原始值的值对象。

  

将地址添加到值对象的价值是什么,而不是将其作为属性添加到权利"零售商"?

优势在于value object 封装其所有数据和行为,从中删除其父实体的职责。此外,它更直观地表达了这样一个事实,即它的属性只有一起有意义(纬度和经度应该总是一起设置)。