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

时间:2013-08-23 08:03:08

标签: domain-driven-design cqrs

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

假设我们有两个有界的背景: A B

在上下文 A 中,我们根据来自上下文 A 的事件构建一个readmodel。我们有一些dao来访问A中的readmodel。

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

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

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

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

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

2 个答案:

答案 0 :(得分:12)

您的阅读模型不属于任何有界上下文,它们在某些有界上下文中被某些域对象生成。但它们是您系统的一个独立组件。

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

答案 1 :(得分:8)

在上下文之间存在依赖关系,在DDD Reference中查看关系和上下文映射实际上很常见。

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

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