Domain driven design 值对象如何存储在数据库中?

Domain driven design 值对象如何存储在数据库中?,domain-driven-design,value-objects,Domain Driven Design,Value Objects,我还没有看到任何示例,但我假设它们保存在数据库中包含实体的表中 例如,如果我有一个Person实体/聚合根和一个对应的Person表,如果它有一个名为Address的Value对象,那么Address值将保存在这个Person表中 对于我拥有其他实体(如公司等)且有地址的领域来说,这有意义吗 (我目前正在编写一个项目管理应用程序,并试图进入DDD)可以将值对象存储在单独的表中,原因正是您所描述的。然而,我认为你误解了实体和VOs——这不是一个与持久性相关的问题 下面是一个例子: 假设公司和个人都

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

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

对于我拥有其他实体(如公司等)且有地址的领域来说,这有意义吗


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

可以将值对象存储在单独的表中,原因正是您所描述的。然而,我认为你误解了实体和VOs——这不是一个与持久性相关的问题

下面是一个例子:

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

  • “如果我修改公司地址,我希望 要自动获取的个人地址 这些变化”
  • “如果我修改公司地址,它将 不得影响个人。地址“
  • 如果1为真,地址应该是一个实体,因此有自己的表

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


    如您所见,地址的持久化方式与实体/VO语义无关。

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


    Vijay Patel的解释非常完美

    我可以问一下我们是否坚持第二种情况,即我们有
    VO
    ,但我们必须使用单独的表,因为它是
    VO
    的集合。然后,本例中的
    VO
    (地址)将具有来自包含实体的外键,并且将具有DB中的键!这违反了价值对象不应该有标识的原则。太好了,非常感谢。但是,如果我们忘记了“DB”,我可以问一下,是什么使VO集合不同于实体实现(当我设计域时)。我必须为此集合创建一个类,该类将具有一个键和实体id。?@AnynameDonotcare不要将实体/值视为表,。。您可以将包含所有值对象的实体存储为MongoDB中的单个文档,或XML中包含子节点的单个节点,或JSON对象,。。不要将逻辑和领域模型与技术表示相耦合