在我处理的几个 DDD 应用程序中,有时实体和值对象都对应于相同的概念。在检索大型列表以供只读使用时,值对象特别有用。
为了区分这两者,我们附加Info
了 Value Object 类。因此,Customer
是一个实体,也是一个CustomerInfo
值对象。
在 DDD 中这是常见的事情吗?还是有任何不同的共同约定?或者也许相同的概念不应该同时建模为实体和值对象?
在我处理的几个 DDD 应用程序中,有时实体和值对象都对应于相同的概念。在检索大型列表以供只读使用时,值对象特别有用。
为了区分这两者,我们附加Info
了 Value Object 类。因此,Customer
是一个实体,也是一个CustomerInfo
值对象。
在 DDD 中这是常见的事情吗?还是有任何不同的共同约定?或者也许相同的概念不应该同时建模为实体和值对象?
在我看来,使用这样的前缀/后缀是针对 DDD
在与领域专家交谈时,您应该专注于命名所有内容。也许这只是我个人的喜好,但我不会一直使用一组预定义的前缀来说话。我宁愿自由地说这些术语并隐藏实现细节。
但是有一个例外,那就是“事件”这个词,因为在这种情况下,您需要向领域专家解释事件是发生的事情。您不应该向他们解释实体和值对象之间的区别。
话虽如此,我个人使用继承来突出实体中的值对象。它们的相等函数不同,也只有后者需要一个 ID 字段。
没有任何通用的约定,每个人都按自己认为合适的方式命名。就我个人而言,我不在乎对象是实体还是值对象。它不会改变我编写代码的方式。此外,可能很少有相同的概念可以同时建模为实体和值对象的情况。即使在不同的有界上下文中,产品仍然是一个实体,即使在 BC1 中它只有一个 id 和名称,而在 BC2 中它具有所有详细信息。
域告诉您哪个应该是实体,哪个不是,但同样,IMO 在使用该对象时差异是微不足道的。重要的是对象设计得当。