域驱动设计中的实体的每个属性都是值对象吗?

Maj*_*imi 5 domain-driven-design

我正在阅读"领域驱动设计的模式,原则和实践".该书建议a的属性Entity应该是值对象,以便模拟域的普遍性语言.我已经看过许多例子,EmailAddressAge只有一个字段来模拟域概念.我很困惑.每个属性都是Entity值对象吗?当我们可以使用普通语言为属性提供数据类型时,您能提供示例吗?

the*_*Dmi 7

不,并非实体的每个属性都是值对象.

实体的属性是以下之一:

  • 正如您所知,值对象.值对象表示没有标识的简单值.
  • 原始人.实际上,这些只是DDD视角下的值对象.原始人可以在DDD中使用,但要小心不要成为Primitive Obsession的受害者.
  • 实体.实体可以包含其他实体.在它们之间具有直接(可导航)引用的所有实体都是同一聚合的一部分.聚合中的"最顶层"实体称为聚合根.只有根具有全局标识,内部实体只具有本地标识.
  • 引用其他聚合的实体.永远不要直接引用这些,使用ID.ID本身又可以建模为值对象.