CQRS - 彼此内部的多个命令/查询处理程序

时间:2016-10-16 10:37:14

标签: c# cqrs

CQRS中的一个好习惯是在彼此中使用多个查询处理程序和/或命令处理程序吗?或者你应该每个用例只有一个?

  • 命令处理程序中的命令处理程序
  • 命令处理程序中的查询处理程序
  • queryhandler中的Queryhandler
  • queryhandler中的命令处理程序 - >就个人而言,我不会这样做,因为你不会指望查询应该改变数据......正确吗?

4 个答案:

答案 0 :(得分:1)

不,我不这么认为。

这是一种不好的做法,因为这种方式忽略了CQRS的两个主要优点。 首先是简单的代码支持和清晰的结构,因为您已经分离了业务逻辑和查询(用于可视化的聚合数据)。

第二个优势是缩放。一个实例处理命令,另外五个处理请求。因此理论上命令代码和查询可以在不同的服务器上执行。类似地,不同的查询可以在不同的服务器上执行,因此包括命令代码和相互查询是不好的主意 - 缩放将是一个巨大的痛苦。

一些CQRS库事件隔离了C& Q侧面在不同的包中,例如here

答案 1 :(得分:1)

坏主意。如果处理程序必须做很多事情,例如调用不同的数据库,第三方,外部文件等,则应将其委托给其他人,例如存储库等。

答案 2 :(得分:0)

CQRS是一种应用单一责任原则的架构模式,它通过提供两个模型(读写模型)而不是一个模型来将查询与命令处理分开。因此,如果您在彼此中使用多个查询处理程序和/或命令处理程序,则将错误地使用该模式。

如果您具有非常高的读取次数,则此模式可以使您扩展。因此,它也不是应用于系统的所有有界上下文的架构模式。

答案 3 :(得分:0)

为什么要在命令处理程序中包含查询处理程序?在创建命令之前查询数据,并使用域的所有相关信息填充命令以执行它。

另一方面,在查询处理程序中包含一个命令处理程序听起来非常危险,因为你正在突破相当重要的原则来分离读写。