70

我还没有真正看到任何示例,但我假设它们保存在数据库的包含实体表中。

IE。如果我有一个 Person 实体/聚合根和一个相应的 Person 表,如果它有一个名为 Address 的值对象,那么 Address 值将保存在这个 Person 表中!

这对于我拥有其他实体(例如公司等)的域是否有意义?

(我目前正在编写一个项目管理应用程序并尝试进入 DDD)

4

2 回答 2

141

出于您所描述的原因,可以将值对象存储在单独的表中。但是,我认为您误解了实体与 VO - 这不是与持久性相关的问题。

这是一个例子:

假设CompanyPerson都具有相同的邮件地址。这些陈述中哪些认为有效?

  1. “如果我修改 Company.Address,我希望 Person.Address 自动获取这些更改”
  2. “如果我修改 Company.Address,它一定不会影响 Person.Address”

如果1为真,则Address应该是一个Entity,因此有它自己的表

如果2为真,则Address应该是一个Value Object。它可以作为组件存储在父实体的表中,也可以拥有自己的表(更好的数据库规范化)。

如您所见,Address 的持久化方式与 Entity/VO 语义无关。

于 2009-03-25T11:06:09.320 回答
20

大多数开发人员倾向于先考虑数据库,然后再考虑其他任何事情。DDD 不知道如何处理持久性。这取决于存储库来处理它。您可以将其保存为 xml、sql、文本文件等。实体/聚合/值对象是与域相关的概念。

Vijay Patel 的解释是完美的。

于 2012-10-04T00:35:09.037 回答