读取每个有界上下文的模型

use*_*392 5 domain-driven-design cqrs

我有一个与cqrs中读取模型相关的问题.

假设我们有两个有界的上下文:AB.

在上下文A中,我们基于来自上下文A的事件构建了一个readmodel .我们有一些dao来访问A中的readmodel.

现在假设B需要与A相同的读取模型.据我所知,有界背景不应相互依赖.

那么我怎样才能使用A中的模型.我看到了解决这个问题的三种可能性

  1. 在A中为读取模型创建API模块,并在上下文B中使用它(将是A和B之间的依赖关系)

  2. 在上下文B中创建一个与A中完全相同的单独读取模型(会导致代码重复)

  3. 在B中创建可从A访问的服务外观(REST或SOAP或其他)以提供读取模型(可能服务并不提供所需的数据)

Bar*_*low 12

您的读取模型不属于任何有界上下文,它们是由某些有界上下文中的某些域对象生成的.但它们是您系统的独立组件.

您的有界上下文不应该需要任何读取模型.读模型是域的输出,而不是输入.如果您需要2 BC通信,请使用事件,而不是阅读模型.读取模型用于GUI /报告,而不用于处理业务规则.


Mar*_*oek 9

实际上,在上下文之间存在依赖关系很常见,请参阅DDD参考中的关系和上下文映射.

在您的示例中,上下文B取决于上下文A.取决于关系类型(上游 - 下游,伙伴关系......)上下文A决定如何让上下文B与它们集成(开放主机,客户/供应商,...... ).

上下文A可以提供读取模型,事件或两者.通过事件集成可以让您独立,尽管通过读取模型进行集成对于您的示例可能更实用(但是一旦上下文A决定分歧,可能会导致摩擦).需要考虑的因素是您与其他背景的关系,以及变化的概率与变化的成本.