事件溯源中的 Reactors/Reactions 是什么?

What are Reactors/Reactions in Event-Sourcing?

我是 CQRS 的新手,我阅读了有关投影和投影仪以及反应器的信息,但我的资源并未完全涵盖它。有人可以在事件溯源中彻底定义反应堆,或者给我一本 link 或书来读吗?我的主要问题是:

A projection 是一个函数,它接收域事件并将其转换为列表、树、图等上的动作...

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

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

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

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

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

如果没有更多细节,很难回答如何实现反应堆的问题。在wolkenkit, a CQRS and event-sourcing framework for JavaScript and Node.js, reactors are nothing but flows. Flows can either be stateless flows or stateful flows中,取决于它们自己是否包含状态。

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

'use strict';

const when = {
  'userManagement.user.loggedIn' (event, mark) {
    // ...
    mark.asDone();
  }
};

module.exports = { when };

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