Domain driven design 对另一个根的根实体引用

Domain driven design 对另一个根的根实体引用,domain-driven-design,Domain Driven Design,我面临一个典型的DDD问题。它必须是非常基本的。我有一个订单和客户。 客户可以创建多个订单。客户是其自身聚合的根。秩序是其自身聚合的根源。但当客户创建订单时,我们会在订单上显示部分客户信息。订单聚合是否应保留对客户的引用? 当它持有订单时,然后当订单存储库获得订单时,我们可以检索部分客户信息以供显示。但当我们在交易中涉及订单时,客户也会参与其中,如果客户同时也在更新,这就产生了问题。请建议大家!我的直觉告诉我,我不能在订单中提及客户 问题2:(新) 在创建订单(使用订单工厂)时,我是否可以获

我面临一个典型的DDD问题。它必须是非常基本的。我有一个订单和客户。 客户可以创建多个订单。客户是其自身聚合的根。秩序是其自身聚合的根源。但当客户创建订单时,我们会在订单上显示部分客户信息。订单聚合是否应保留对客户的引用? 当它持有订单时,然后当订单存储库获得订单时,我们可以检索部分客户信息以供显示。但当我们在交易中涉及订单时,客户也会参与其中,如果客户同时也在更新,这就产生了问题。请建议大家!我的直觉告诉我,我不能在订单中提及客户

  • 问题2:(新)

在创建订单(使用订单工厂)时,我是否可以获取并保存对给定订单的客户(来自客户存储库)的引用,并安全地保存订单(无需更新内部客户,客户仅用于信息/查询?),而无需在其他地方修改同一客户时创建争用?让我们假设NHibernate是ORM。

一个简单的答案是,您持有客户的ID,或者,如果您的域需要一些ValueObject,其中包含关于客户的最小信息集(ID、名称)

一个更复杂的答案是考虑有界上下文。看看他希望把BC章节作为书中的第一章放在哪里


其思想是,在客户管理上下文中,客户实体可以是客户聚合的AR,订单可以是客户聚合中的实体。在账单绑定上下文中,您可以有一个订单AR,其中包含一个客户实体

谢谢你。如果我采用最简单的方法,我是否仍然可以从订单到客户设置表级引用外键约束,即确保如果我在表级删除客户,我必须确保相应的订单也被删除。您可以这样做,但是,如果这是您所在领域的有效业务案例,我建议您在域级别而不是数据库级别处理。如果没有关联订单,则删除客户是数据库级别的一项工作,例如每隔“X”年,会与不再活跃的客户一起删除客户表。它本身不是一个UI操作。甚至订单在完成其生命周期后每年都会被删除。我还需要继续使用复杂的方法来分离有界上下文吗?同时,我认为我需要在表级别施加外键约束,以保持检查的合理性:)请提供建议。关于分离有界上下文的复杂方法,如您所说的客户管理有界上下文,客户实体可以是客户聚合的AR,订单可以是客户聚合中的实体。我们如何确保并发Hibernate会话不会抛出错误;一个会话针对客户(比如客户更新其个人资料),另一个会话中审批人同时编辑客户订单?