繁体   English   中英

DDD\CQRS\ES 骨料补液

[英]DDD\CQRS\ES Aggregate rehydration

当命令发出多个事件时,如何确保正确补液。 什么是正确的方法将许多事件标记为原子变化

当应用所有可用事件时,补液完成。 但是,当您的命令发出多个事件时,您只需确保这些事件在原子操作中保持在一起。

例子:

当前事件 Stream:

1. MyEvent1

然后执行一个发出多个事件的命令:

MyCommand emits ->
  MyEvent1
  MyEvent2

这些事件将作为原子操作附加到事件 Stream。

新事件 Stream:

1. MyEvent1
2. MyEvent1
3. MyEvent2

现在,在为骨料补水时,您只需阅读整个 Event Stream 直到最后,您就完成了。

当命令发出多个事件时,如何确保正确补液。 什么是正确的方法将许多事件标记为原子变化

通常

  • 您的域逻辑返回一系列事件。
  • 您以原子方式将整个序列写入事件历史记录
  • 重构时,您使用事件历史记录

请注意,第二步意味着您的持久事件存储将支持事件序列的原子写入。

注意:我们在重构我们域 model 的 state 时通常不依赖广播机制,而是使用历史记录。

在 CQRS 世界中,这将包括通过加载历史来创建读取 model,然后按照写入的固定顺序播放事件。

这取决于您的底层存储。 为不支持事务的持久存储实现原子写入的常用方法是创建一批事件并将其作为单个操作写入。

在对事件进行补水时,您可以将批次扁平化为扁平的事件序列/流,以构建您当前的 state。 在补液期间,您真正关心所有事件,因为您将始终对完全补水的电流 state 应用下一个命令。 因此,将批次保持在该点是没有意义的。

如果您不想自己构建,有许多解决方案支持像这样的 state 的写入/补液。

祝你好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM