Domain driven design 值对象如何存储在数据库中?
我还没有看到任何示例,但我假设它们保存在数据库中包含实体的表中 例如,如果我有一个Person实体/聚合根和一个对应的Person表,如果它有一个名为Address的Value对象,那么Address值将保存在这个Person表中 对于我拥有其他实体(如公司等)且有地址的领域来说,这有意义吗Domain driven design 值对象如何存储在数据库中?,domain-driven-design,value-objects,Domain Driven Design,Value Objects,我还没有看到任何示例,但我假设它们保存在数据库中包含实体的表中 例如,如果我有一个Person实体/聚合根和一个对应的Person表,如果它有一个名为Address的Value对象,那么Address值将保存在这个Person表中 对于我拥有其他实体(如公司等)且有地址的领域来说,这有意义吗 (我目前正在编写一个项目管理应用程序,并试图进入DDD)可以将值对象存储在单独的表中,原因正是您所描述的。然而,我认为你误解了实体和VOs——这不是一个与持久性相关的问题 下面是一个例子: 假设公司和个人都
(我目前正在编写一个项目管理应用程序,并试图进入DDD)可以将值对象存储在单独的表中,原因正是您所描述的。然而,我认为你误解了实体和VOs——这不是一个与持久性相关的问题 下面是一个例子: 假设公司和个人都有相同的邮件地址。这些陈述中哪一个认为有效?
如您所见,地址的持久化方式与实体/VO语义无关。大多数开发人员倾向于先考虑数据库,然后再考虑其他内容。DDD不知道如何处理持久性。这取决于存储库来处理。您可以将其持久化为xml、sql、文本文件等。实体/聚合/值对象是与域相关的概念
Vijay Patel的解释非常完美 我可以问一下我们是否坚持第二种情况,即我们有
VO
,但我们必须使用单独的表,因为它是VO
的集合。然后,本例中的VO
(地址)将具有来自包含实体的外键,并且将具有DB中的键!这违反了价值对象不应该有标识的原则。太好了,非常感谢。但是,如果我们忘记了“DB”,我可以问一下,是什么使VO集合不同于实体实现(当我设计域时)。我必须为此集合创建一个类,该类将具有一个键和实体id。?@AnynameDonotcare不要将实体/值视为表,。。您可以将包含所有值对象的实体存储为MongoDB中的单个文档,或XML中包含子节点的单个节点,或JSON对象,。。不要将逻辑和领域模型与技术表示相耦合