事件溯源中的 Reactors/Reactions 是什么?
What are Reactors/Reactions in Event-Sourcing?
我是 CQRS 的新手,我阅读了有关投影和投影仪以及反应器的信息,但我的资源并未完全涵盖它。有人可以在事件溯源中彻底定义反应堆,或者给我一本 link 或书来读吗?我的主要问题是:
- 什么是反应器?
- 反应堆的结构是什么?
- 我们如何实现反应器?
A projection 是一个函数,它接收域事件并将其转换为列表、树、图等上的动作...
这里的想法是,您希望语义域事件存储它们,并能够重放它们,但您需要对它们进行各种解释以有效地查询它们。因此,您需要一个投影,表明对于给定视图,域事件 X 表示 INSERT
或 UPDATE
或 DELETE
。
因此,投影基本上是域事件和 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的作者之一,所以请对示例持保留态度。)
我是 CQRS 的新手,我阅读了有关投影和投影仪以及反应器的信息,但我的资源并未完全涵盖它。有人可以在事件溯源中彻底定义反应堆,或者给我一本 link 或书来读吗?我的主要问题是:
- 什么是反应器?
- 反应堆的结构是什么?
- 我们如何实现反应器?
A projection 是一个函数,它接收域事件并将其转换为列表、树、图等上的动作...
这里的想法是,您希望语义域事件存储它们,并能够重放它们,但您需要对它们进行各种解释以有效地查询它们。因此,您需要一个投影,表明对于给定视图,域事件 X 表示 INSERT
或 UPDATE
或 DELETE
。
因此,投影基本上是域事件和 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的作者之一,所以请对示例持保留态度。)