值对象如何存储在数据库中?
我没有看到任何示例,但我假设它们保存在数据库中的包含实体表内。
IE浏览器。 如果我有一个Person实体/聚合根和相应的Person表,如果它有一个名为Address的Value对象,Address值将被保存在这个Person表中!
这对于我有其他实体如公司等有一个地址的域是否有意义?
(我正在写一个项目pipe理应用程序,并试图进入DDD)
将Value对象存储在一个单独的表中是可以的,因为你描述的原因。 不过,我认为你们误解了实体vs虚拟组织 – 这不是一个持久性相关的问题。
这是一个例子:
假设一个公司和一个人都有相同的邮件地址 。 哪些陈述认为有效?
- “如果我修改Company.Address,我想Person.Address自动获取这些更改”
- “如果我修改Company.Address,它不会影响Person.Address”
如果1为真, 地址应该是一个实体 ,因此它有自己的表
如果2是真的, 地址应该是一个值对象 。 它可以作为一个组件存储在父实体的表中,也可以有它自己的表(更好的数据库规范化)。
正如你所看到的,Address是如何被持久化的,与Entity / VO语义无关。
大多数开发人员倾向于先在数据库中思考问题。 DDD不知道如何处理持久性。 这是由存储库来处理的。 你可以把它作为一个XML,SQL,文本文件等等。实体/聚合/值对象是与域有关的概念。
Vijay Patel的解释是完美的。
我已经开始学习埃里克埃文斯书和优秀的dddsample货物项目DDD学习为例。 http://dddsample.sourceforge.net/
所以对于那些想要在领域模型层实现这个细微差别的代码实现中的差异的人(比如我),我会说:
我认为,我们认为,方法Equals或/和sameIdentityAs / SameValueAs(来自接口Entity和ValueObject)是expression式的地方。
这只是我的感觉:)
我觉得也有趣的是,