Domain driven design ddd中上游上下文与下游上下文的关系

Domain driven design ddd中上游上下文与下游上下文的关系,domain-driven-design,bounded-contexts,Domain Driven Design,Bounded Contexts,最近,我了解了ddd,它说两个相关的有界上下文之间的关系是上游和下游的 但在一种情况下,A是上游,B是下游,而在另一种情况下,B是上游和下游,这有可能吗 但如果可能的话,我认为两个有界上下文是高度耦合的。它们不是独立的业务逻辑。那个么,当这种情况发生时,是否意味着我们并没有将域正确地划分为有界上下文 或者我们确实允许两个有界上下文在某种程度上进行通信,如果它们相互调用的API太多,它们实际上是一个有界上下文,但我们没有正确地划分它。上游上下文将影响下游上下文,而相反的上下文可能不正确。 例如,假

最近,我了解了ddd,它说两个相关的有界上下文之间的关系是上游和下游的

但在一种情况下,A是上游,B是下游,而在另一种情况下,B是上游和下游,这有可能吗

但如果可能的话,我认为两个有界上下文是高度耦合的。它们不是独立的业务逻辑。那个么,当这种情况发生时,是否意味着我们并没有将域正确地划分为有界上下文


或者我们确实允许两个有界上下文在某种程度上进行通信,如果它们相互调用的API太多,它们实际上是一个有界上下文,但我们没有正确地划分它。

上游上下文将影响下游上下文,而相反的上下文可能不正确。 例如,假设有两个微服务作为有界上下文,
MoneyTransferService
以及
NotificationService
。如果转账,通知应向客户发送一封电子邮件,其中包括一些与交易相关的信息。所以
MoneyTransferService
在上游
通知服务
在下游

DDD描述了几种帮助我们描述和/或管理不同上下文交互方式的组织模式。这里最合适的模式称为反腐败层(ACL)。 为了在我的示例中遵循此模式,为了与两个微服务通信,可以使用
存储库层
,或者更好的解决方案是发布消息并通过RabbitMQ等工具使用它们。通过使用RabbitMQ,这些服务只依赖于消息类型,不需要知道任何其他信息

就依赖关系而言,有界上下文之间的交互并不意味着它们之间存在依赖关系,您也不一定需要将它们重新设计为有界上下文

您的目标应该是在您的领域知识的指导下实现最有意义的分离。重点不是规模,而是业务能力。此外,如果应用程序的某个区域需要基于大量依赖项的明确内聚,这也表明需要一个单一的有界上下文。
有界上下文之间的通信没有问题,它们需要彼此完成业务操作。

上游上下文将影响下游上下文,而相反的上下文可能不正确。 例如,假设有两个微服务作为有界上下文,
MoneyTransferService
以及
NotificationService
。如果转账,通知应向客户发送一封电子邮件,其中包括一些与交易相关的信息。所以
MoneyTransferService
在上游
通知服务
在下游

DDD描述了几种帮助我们描述和/或管理不同上下文交互方式的组织模式。这里最合适的模式称为反腐败层(ACL)。 为了在我的示例中遵循此模式,为了与两个微服务通信,可以使用
存储库层
,或者更好的解决方案是发布消息并通过RabbitMQ等工具使用它们。通过使用RabbitMQ,这些服务只依赖于消息类型,不需要知道任何其他信息

就依赖关系而言,有界上下文之间的交互并不意味着它们之间存在依赖关系,您也不一定需要将它们重新设计为有界上下文

您的目标应该是在您的领域知识的指导下实现最有意义的分离。重点不是规模,而是业务能力。此外,如果应用程序的某个区域需要基于大量依赖项的明确内聚,这也表明需要一个单一的有界上下文。
有界上下文之间的通信没有问题,它们需要彼此完成业务操作。

谢谢您的回答。但我想知道的是,如果我们处于这样一种情况,有时a向B传输数据以完成B的业务操作,有时a需要B提供数据以完成其业务操作,这种情况是允许的还是我们将有界上下文划分错误,需要将两个有界上下文重新设计为一个有界上下文context@YeKc1M我编辑了我的答案以涵盖你提到的情况。请再看一遍。你可以看看这个答案,它与一个类似的问题有关。。。谢谢你的回答。但我想知道的是,如果我们处于这样一种情况,有时a向B传输数据以完成B的业务操作,有时a需要B提供数据以完成其业务操作,这种情况是允许的还是我们将有界上下文划分错误,需要将两个有界上下文重新设计为一个有界上下文context@YeKc1M我编辑了我的答案以涵盖你提到的情况。请再看一遍。你可以看看这个答案,它与一个类似的问题有关。。。