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

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

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

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

有帮助吗?

解决方案

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

这是一个例子:

假设一个 公司 两者都有相同的邮件 地址. 。这些陈述中哪些被认为是有效的?

  1. “如果我修改company.address,我希望person.address自动获取这些更改”
  2. “如果我修改公司。

如果 1 是真的, 地址 应该是一个 实体, ,因此有它自己的表

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

正如您所看到的,Address 如何持久化与 Entity/VO 语义无关。

其他提示

大多数开发人员倾向于认为在数据库中的第一个先天下之忧。 DDD不知道持久性是如何处理的。这是到仓库来面对这一切。你可以坚持将其作为XML,SQL,文本文件,等等等等实体/聚集/值对象是相关领域的概念。

由维杰帕特尔解释是完美的。

我已经开始学习DDD与Eric Evans的书和优秀dddsample货物项目为例。 http://dddsample.sourceforge.net/

因此,对于谁愿意兑现代码执行这一细微的域模型层的差异的(比如我),我会说:

在overidded方法Equals或/和sameIdentityAs / SameValueAs(从接口实体和的ValueObject)是,我认为,它们的表达的位置。

这只是我的感觉:)

我觉得有趣的阅读这也:

http://martinfowler.com/bliki/ValueObject.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top