在CQRS / ES系统中存储命令有什么好处?

时间:2012-04-18 15:32:53

标签: design-patterns cqrs event-store

我正在研究CQRS /事件存储系统。目前,我使用的模式是命令是同步的。也就是说,在命令完成之前,用户界面不显示完成的操作,并且向用户显示成功/失败。在执行命令期间,生成的所有事件(例如,在聚合根Y上发生的操作X)都存储在持久存储中。

我读过的CQRS的所有描述都实现了命令存储。我想知道在我的情况下是否需要这个。

另一个注意事项 - 有许多长时间运行的命令类型操作,因此我将操作分解为生成事件的命令,然后事件又发出更多命令。根据聚合根的状态,这些命令是幂等的。我不知道这会对答案产生什么影响,但值得指出。

谢谢, 埃里克

2 个答案:

答案 0 :(得分:7)

  1. 回归测试 在每次开发后,您都可以从生产环境中获取命令日志,重新执行它并将生成的事件流与生产环境中的事件流进行比较。如果它们不同 - 你的逻辑就会回归。

  2. 消息流可视化和分析。

答案 1 :(得分:4)

我在没有事件源的情况下看到的Cqrs示例是存储系统状态的常用关系数据库,而不是显示数据状态如何产生的事件。 “命令采购”对我来说是一个新概念,因为命令处理程序可能会随着时间的推移发生变化,所以看起来并不正确。对命令处理程序逻辑的任何更改都可能导致命令在重放时失败。由于您的对象属性是直接设置的,因此重播事件不会出现此问题。