领域驱动设计——何时将一个有界上下文分成两个

Domain Driven Design - When to seperate one bounded context into two

在学习领域驱动设计时,我了解到我们应该保持两个有界上下文相互独立。但是,我在解耦两个真正相互依赖的有界上下文时遇到了麻烦。

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

  1. 订单 [在销售上下文中] 引用了产品 [在库存上下文中]。
  2. 当用户支付订单时[在销售环境中完成],产品数量应该减少[在库存环境中完成]。

我知道我可以使用域事件和 Saga 来代替跨界服务调用,但是我只想知道我的设计是否正确? Sales 和 Inventory 真的属于两个分离的有界上下文吗?

如果您改为将它们分隔在三个有界上下文中,则可以使这些依赖关系无循环:

  • Product BC,管理您的产品(包括价格、重量……);没有依赖项
  • Sales BC,处理销售;对产品 BC 的依赖性
  • 库存 BC,对产品和销售 BC 的依赖性。

通常销售与库存完全分开(即,您可以在产品可用时进行销售 w/o)。如果您要求只能销售有库存的产品,请让您的 UI 负责仅提供库存中也有库存的待售产品。