CQRS + ES应该坚持命令和查询吗?

时间:2015-05-23 06:01:28

标签: cqrs event-sourcing

处理程序使用命令来修改聚合状态并发出持久存储到事件存储的事件。

但是根据今天的业务逻辑,我们可能会发布一些事件而有些事件不会发生...... 我想知道这是否意味着命令也应该保留?您的经历是什么?

同样可能会持续查询某些分析目的...

1 个答案:

答案 0 :(得分:4)

这是一个很好的问题。要记住的关键是事件源系统中的事件代表已发生的事情。仅仅因为你将来改变逻辑并没有改变事件已经发生的事实。如何处理已被弃用的这些事件是您需要考虑的事情。

您可以选择多种路线。一种可能性是为事件创建升级程序。您可以通过升级过程运行它,而不是处理事件,该升级过程可以有效地将其转换为下一个版本。另一种方法是在模型中进行升级工作。您甚至可能会发现在新系统中可以完全忽略它。

无论你决定做什么,最重要的是要考虑事件流作为一个整体。确保您所做的更改不会阻止您重新运行您的活动。不要破坏你的活动流!

我在写的一篇文章中对此有了更深入的回应。您可以在此处找到它:How to Upgrade CQRS Events Without Busting Your Event Stream

希望你觉得它有用。

关于存储查询和命令的其他要点。你可以做到这两点,但是,出于不同的原因你需要小心它们。

除非整个系统基于CQRS和ES,否则重新运行命令可能会失败,因为其他系统不同步。这不是事件流的问题。您还应该确保在命令中处理敏感信息。例如,它们可能包含未加密的信息,期望在域内加密。

关于查询:CQRS的驱动因素之一是平均业务系统中的读写比率。如果您记录查询,可能会损害性能,并且可能会对存储空间有更高的要求来处理数据的增长。

我发现记录命令和查询很有用,而不仅仅是存储它们。通过这种方式,我可以了解最常运行,持续时间和成功的历史。要监控的所有有用的健康状况。

无论如何,希望有帮助。