【问题标题】:What are the advantages to storing commands in a CQRS/ES system?在 CQRS/ES 系统中存储命令有什么优势?
【发布时间】:2012-04-30 01:35:59
【问题描述】:

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

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

另一个注意事项 - 有很多长时间运行的命令类型操作,所以我将操作分解为一个生成事件的命令,然后这些事件依次发出更多命令。这些命令是幂等的,基于聚合根的状态。我不知道这会如何影响答案,但值得指出。

【问题讨论】:

  • 能否提供一些存储命令的实现示例?我见过的大多数示例只存储命令产生的事件。
  • 我没有任何框架,但没有事件源的 CQRS 记录回放命令,至少在我的理解中。
  • 我有点担心安全问题。您打算如何处理 ChangeUserPassword 等包含明文密码的命令?

标签: design-patterns cqrs event-sourcing


【解决方案1】:
  1. 回归测试 在每次开发迭代之后,您可以从生产环境中获取命令日志,重新执行它并将生成的事件流与生产环境中的事件流进行比较。如果它们不同 - 你的逻辑中有回归。

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

【讨论】:

    【解决方案2】:

    我见过的没有事件溯源的 Cqrs 示例是存储系统状态的常用关系数据库,而不是显示数据状态如何产生的事件。 “命令采购”对我来说是一个新概念,并且似乎不正确,因为命令处理程序会随着时间而改变。对命令处理程序逻辑的任何更改都可能导致命令在重放时失败。重放事件没有这个问题,因为您的对象属性是直接设置的。

    【讨论】:

      猜你喜欢
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多