CQRS - 单命令处理程序?

har*_*rri 4 cqrs

我只是想绕过CQRS(/ ES).我没有对CQRS做过任何严肃的事情.可能我现在缺少一些非常基本的东西.目前我正在阅读"探索CQRS和事件采购".在命令方面,有一句话让我感到困惑:

"单个收件人处理命令."

我在Greg Young(FakeBus.cs)的CQRS示例应用程序中也看到了这一点,当为任何命令类型注册了多个命令处理程序时,会抛出异常.

对我来说,这表明这是CQRS(或命令?)的基本原则.是什么原因?对我来说,这有点违反直觉.

想象一下,我有两个组件需要执行一些操作以响应命令(如果我有两个相同组件或两个独立组件的实例,则无关紧要).然后我需要创建一个将命令委托给这个组件的处理程序.

在我看来,这是一种不必要的依赖.就CQRS而言,命令只不过是发送的消息.我不明白为什么这个消息应该只有一个处理程序.

谁能告诉我这里缺少什么?可能有一个非常好的理由,我现在才看到.

问候

Dav*_*yon 9

我自己并不是CQRS的专家,但也许我可以帮助解决一些问题.

"单个收件人处理命令.",原因是什么?

其中一个基本原因是事务一致性.命令需要在应用程序的一个离散(和隔离)部分中处理,以便可以在单个事务中提交它.一旦开始拥有多个处理程序,将应用程序分配到单个进程之外(并保持事务一致性)几乎是不可能的.所以,虽然您可以这样设计,但不建议这样做.

希望这可以帮助.