什么是事件溯源中的反应器/反应?

Ali*_*ili 7 reactor cqrs event-sourcing

我是 CQRS 的新手,我阅读了关于投影和投影仪以及反应堆的内容,但我的资源没有完全涵盖它。有人可以在事件溯源中彻底定义反应器,或者给我一个链接或书籍供我阅读吗?我的主要问题是:

  • 什么是反应堆?
  • 反应器的结构是什么?
  • 我们如何实现反应堆?

Gol*_*den 5

一个投影它接收域事件并将其转换为列表、树、图等上的操作\xe2\x80\xa6

\n\n

这里的想法是,您希望语义域事件存储它们并能够重播它们,但您需要对它们进行各种解释才能有效地查询它们。因此,您需要一个投影来表明域事件 X 意味着INSERTUPDATEDELETE对于给定视图

\n\n

因此,投影基本上是领域事件和 CRUD 操作之间的映射。您也可能会说投影是领域事件的多种解释之一。

\n\n

现在,响应域事件可能需要执行与更新表无关的操作。例如,每当您收到userLoggedIn事件时,您可能想向用户发送电子邮件。这就像一个简单的if this then that规则。这基本上就是所谓的反应。您只需以某种自定义方式对域事件做出反应即可。

\n\n

因此,反应器(发生反应的组件)的结构与投影仪的结构非常相似。唯一的区别是反应器不会更新读取模型,而是执行您想要的任何任意操作。

\n\n

换句话说:投影是一种特殊的反应,它总是与更新读取模型有关。由于这种情况很常见,因此您有一个专门的模式,但一般来说:每当您响应接收事件而执行某些操作时,这就是一种反应。

\n\n

如果没有更多细节,如何实现反应堆的问题很难回答。在wolkenkit(用于 JavaScript 和 Node.js 的 CQRS 和事件源框架)中,反应器只不过是流。流可以是无状态流有状态流,具体取决于它们本身是否包含状态。

\n\n

一个简单的例子(当然是 wolkenkit 特有的)可能如下所示:

\n\n
\'use strict\';\n\nconst when = {\n  \'userManagement.user.loggedIn\' (event, mark) {\n    // ...\n    mark.asDone();\n  }\n};\n\nmodule.exports = { when };\n
Run Code Online (Sandbox Code Playgroud)\n\n

(免责声明:我是 wolkenkit 的作者之一,所以请对这些示例持保留态度。)

\n