CQRS - 命令存储持久化规则

CQRS - Command Store persisting rule

我一直在使用 Paramore Brigther 来实现 CQRS 及其命令存储。我的问题是:

最佳做法是什么,是在处理方法完成之前还是之后存储命令?我读过 here 之前建议这样做,但如果处理程序失败,我们不想不存储命令吗?

但是我能想到一些您希望存储命令的场景 before/after 执行的 hendler 方法:

案例A,如果有IncreaseCreditLimitCommand,在客户检索过程中,没有找到客户。 IMO,我们不想存储这个命令,是吗?

案例B,如果有IncreaseCreditLimitCommand,在业务验证期间,客户被拒绝增加限额。 IMO,我们仍然想存储这个命令,不是吗?

What would the best practice be, is it storing the command before or after the handling method completed? I read here it recommend to do it before but don't we want to not storing the command if the handler fails ?

为什么不呢?如果我们希望能够重现后面发生的事情,那么我们还需要能够重现失败的命令。

如果您正在考虑以命令的持久性为特征的设计,LMAX Disruptor 的各种文章是很好的读物。

我不知道 "Paramore Brigther" 是什么,但我可以告诉您 DDD 和 CQRS。这两种方法通常与事件溯源一起使用,因为它们像拼图一样组合在一起。在事件溯源中,您保存事件而不是命令。这很有意义,因为 DDD 是事件驱动的。我不打算更深入地解释它,因为它是一个非常大的主题,但我认为你应该考虑这种方法而不是存储命令。它会让你在未来避免很多设计问题。