6

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

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

在上下文A中,我们基于上下文A中的事件构建读取模型。我们有某种 dao 可以访问 A 中的 readmodel。

现在假设B需要与A相同的读取模型。据我了解,有界上下文不应相互依赖。

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

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

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

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

4

2 回答 2

13

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

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

于 2013-09-18T09:39:28.203 回答
9

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

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

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

于 2013-08-23T09:51:45.917 回答