是否存在广泛认可的命名约定来区分实体和值对象?

时间:2013-04-30 03:48:30

标签: .net domain-driven-design

在我工作的几个DDD应用程序上,我们有时同时对应于相同概念的实体和值对象。在检索大型列表以供只读使用时,值对象特别有用。

为了区分这两者,我们将Info附加到Value Object类。因此,Customer是一个实体,CustomerInfo是值对象。

在DDD中这是一件普通的事吗?或者是否有任何不同的共同惯例?或者也许同一个概念不应同时建模为实体和值对象?

2 个答案:

答案 0 :(得分:1)

没有任何共同的惯例,每个人都认为合适。我个人并不关心对象是实体还是值对象。它不会改变我编码的方式。此外,可能没有多少情况可以同时将同一概念同时建模为实体和值对象。即使在不同的有界上下文中,产品仍然是一个实体,即使在BC1中它只有一个id和名称,在BC2中它具有所有细节。

域名告诉您哪个应该是实体,哪个不是,但IMO在使用对象时差异无关紧要。重要的是要正确设计对象。

答案 1 :(得分:1)

在我看来,使用像这样的前缀/ sufix是针对DDD的

在与域专家交谈时,您应该专注于命名所有内容。也许这只是我个人的偏好,但我一直都不习惯使用预定义的前缀集一直说话。我宁愿自由地说出这些术语并隐藏实现细节。

但是有一个例外,那就是“事件”这个词,因为在这种情况下你需要向域专家解释一个事件是发生了什么。您不应该向他们解释实体和价值对象之间的区别。

话虽这么说,我个人使用继承来突出实体中的值对象。它们的相等功能是不同的,只有后者才需要ID字段。