【发布时间】:2015-05-24 00:18:43
【问题描述】:
处理程序通常使用命令来修改聚合状态并发出事件,这些事件会持久保存到事件存储中。
但是根据今天的业务逻辑,我们可能会发出一些事件,而明天不会发出一些事件...... 我想知道这是否意味着命令也应该被持久化?您对此有何经验?
出于某些分析目的,恕我直言,查询可能会被持久化......
【问题讨论】:
标签: cqrs event-sourcing
处理程序通常使用命令来修改聚合状态并发出事件,这些事件会持久保存到事件存储中。
但是根据今天的业务逻辑,我们可能会发出一些事件,而明天不会发出一些事件...... 我想知道这是否意味着命令也应该被持久化?您对此有何经验?
出于某些分析目的,恕我直言,查询可能会被持久化......
【问题讨论】:
标签: cqrs event-sourcing
这是个好问题。要记住的关键是事件源系统中的事件代表已经发生的事情。仅仅因为你在未来改变了逻辑并不会改变事件已经发生的事实。您需要考虑如何处理这些已弃用的事件。
您可以选择多种路线。一种可能性是为事件创建升级程序。您无需处理事件,而是通过升级过程运行它,从而有效地将其转换为下一个版本。另一种方法是在模型内进行升级工作。您甚至可能会发现在新系统中可以完全忽略它。
无论您决定做什么,要考虑的最重要的事情就是整个事件流。确保您所做的更改不会阻止您重新运行您的活动。不要破坏您的事件流!
在我写的一篇文章中,我对此有更深入的回应。你可以在这里找到它:How to Upgrade CQRS Events Without Busting Your Event Stream
希望对您有所帮助。
关于存储查询和命令的其他观点。您可以同时使用这两种方法,但是出于不同的原因,您需要小心处理它们。
除非您的整个系统基于 CQRS 和 ES,否则重新运行命令可能会失败,因为其他系统不同步。这不是事件流的问题。您还应该确保在命令中处理敏感信息。例如,它们可能包含未加密的信息,并期望在域内对其进行加密。
关于查询:CQRS 的驱动因素之一是平均业务线系统中的读写比率。如果您记录查询,则可能会影响性能,并且可能对存储空间的要求更高以处理数据的增长。
我发现记录命令和查询而不是仅仅存储它们很有用。通过这种方式,我可以了解最常运行的内容、持续时间和成功的历史。监控所有有用的健康统计数据。
无论如何,希望这会有所帮助。
【讨论】: