Domain driven design 领域驱动设计-何时将一个有界上下文拆分为两个

Domain driven design 领域驱动设计-何时将一个有界上下文拆分为两个,domain-driven-design,Domain Driven Design,在学习领域驱动设计时,我学到了我们应该保持两个有界上下文相互独立。然而,我很难将两个相互依赖的有界上下文解耦 更具体地说,我正在设计一个销售点系统。它有一个库存管理子系统,用于管理库存中的产品。它还有一个销售子系统,负责管理客户订单、交易。它们似乎是分离的,但我无法将它们分离: 订单[在销售上下文中]引用了[在库存上下文中]的产品 当用户支付订单[在销售上下文中完成]时,产品数量应该减少[在库存上下文中完成] 我知道我可以使用域事件和Saga来代替跨境服务调用,但我只想知道我的设计是否正确?销售

在学习领域驱动设计时,我学到了我们应该保持两个有界上下文相互独立。然而,我很难将两个相互依赖的有界上下文解耦

更具体地说,我正在设计一个销售点系统。它有一个库存管理子系统,用于管理库存中的产品。它还有一个销售子系统,负责管理客户订单、交易。它们似乎是分离的,但我无法将它们分离:

  • 订单[在销售上下文中]引用了[在库存上下文中]的产品
  • 当用户支付订单[在销售上下文中完成]时,产品数量应该减少[在库存上下文中完成]
    我知道我可以使用域事件和Saga来代替跨境服务调用,但我只想知道我的设计是否正确?销售和库存真的属于两个分离的有界上下文吗

    如果在三个有界上下文中分离这些依赖项,则可以使这些依赖项循环自由:

    • 产品BC,管理产品的地方(包括价格、重量等);无依赖项
    • 销售BC,处理销售的地方;对产品BC的依赖性
    • 库存业务连续性、对产品和销售业务连续性的依赖性

    通常,销售与库存完全分离(即,您可以在没有产品可用的情况下进行销售)。如果您要求只能销售库存产品,请让您的用户界面负责仅提供库存中也有库存的产品以供销售。

    谢谢您的回复。允许一个BC引用另一个BC的聚合根吗?因为库存是以产品列表的形式表示的,所以我不能使用域事件来解耦它们。不,它们不应该这样,您通常会在反腐败层中围绕它们添加一个外观。沃恩·弗农(Vaughn Vernon)的IDDD书中有一些例子(用户在另一个BC中成为版主/海报等)。