CQRS:读取API中的模型投影更新



我想在API上实现一个简单的CQRS。简而言之:

  1. 命令和查询的独立路由
  2. 单独的数据库表(目前在同一个数据库上(。规范化的一个用于命令,而非规范化的用于查询
  3. 使用现有的外部事件总线对查询读取模型进行异步事件驱动更新

命令执行后,我自然需要引发一个事件并将其传递给事件总线。事件总线将处理事件并将其传递给其订阅者。在这种情况下,订阅者是需要更新的读取模型。

因此,我需要API上的回调路由,它从命令总线获取事件并更新读取模型投影(即:更新用于查询的去规范化DB表(。

问题是读取模型投影的更新既不是命令(我们不执行任何域逻辑(,也不是查询。

问题是:这种异步读取模型更新应该如何工作才能同时符合CQRS和DDD?

此异步读取模型更新应如何工作才能同时符合CQRS和DDD?

我通常认为信息流是一个三角形。

  • 我们将来自外部世界的信息复制到我们的";写入模型";,通过命令
  • 我们将来自写入模型的信息复制到我们的"写入"模型中;读取模型">
  • 我们通过查询将读取模型中的信息复制到外部世界

中间步骤的通用语言是";投影";。

因此投影(通常(异步运行;写入模型";并更新";读取模型";。

在您概述的体系结构中,它将是订阅总线的投影。当总线发出写入模型已更改的信号时,我们唤醒投影,并让它运行,以便它可以更新读取模型。

(注意信息流-我们从总线获得的信号触发投影运行,但投影从写入模型复制数据,而不是从事件总线消息复制数据。这不是安排事情的唯一方法,但它很简单,因此很容易推断事情何时开始呈梨形。(

通常情况下,投影在更新读取模型时会存储一些自己的元数据,以免重复工作。

最新更新