在我工作的几个DDD应用程序上,我们有时同时对应于相同概念的实体和值对象。在检索大型列表以供只读使用时,值对象特别有用。
为了区分这两者,我们将Info
附加到Value Object类。因此,Customer
是一个实体,CustomerInfo
是值对象。
在DDD中这是一件普通的事吗?或者是否有任何不同的共同惯例?或者也许同一个概念不应同时建模为实体和值对象?
答案 0 :(得分:1)
没有任何共同的惯例,每个人都认为合适。我个人并不关心对象是实体还是值对象。它不会改变我编码的方式。此外,可能没有多少情况可以同时将同一概念同时建模为实体和值对象。即使在不同的有界上下文中,产品仍然是一个实体,即使在BC1中它只有一个id和名称,在BC2中它具有所有细节。
域名告诉您哪个应该是实体,哪个不是,但IMO在使用对象时差异无关紧要。重要的是要正确设计对象。
答案 1 :(得分:1)
在我看来,使用像这样的前缀/ sufix是针对DDD的
在与域专家交谈时,您应该专注于命名所有内容。也许这只是我个人的偏好,但我一直都不习惯使用预定义的前缀集一直说话。我宁愿自由地说出这些术语并隐藏实现细节。
但是有一个例外,那就是“事件”这个词,因为在这种情况下你需要向域专家解释一个事件是发生了什么。您不应该向他们解释实体和价值对象之间的区别。
话虽这么说,我个人使用继承来突出实体中的值对象。它们的相等功能是不同的,只有后者才需要ID字段。