CQRS中的一个好习惯是在彼此中使用多个查询处理程序和/或命令处理程序吗?或者你应该每个用例只有一个?
答案 0 :(得分:1)
不,我不这么认为。
这是一种不好的做法,因为这种方式忽略了CQRS的两个主要优点。 首先是简单的代码支持和清晰的结构,因为您已经分离了业务逻辑和查询(用于可视化的聚合数据)。
第二个优势是缩放。一个实例处理命令,另外五个处理请求。因此理论上命令代码和查询可以在不同的服务器上执行。类似地,不同的查询可以在不同的服务器上执行,因此包括命令代码和相互查询是不好的主意 - 缩放将是一个巨大的痛苦。
一些CQRS库事件隔离了C& Q侧面在不同的包中,例如here。
答案 1 :(得分:1)
坏主意。如果处理程序必须做很多事情,例如调用不同的数据库,第三方,外部文件等,则应将其委托给其他人,例如存储库等。
答案 2 :(得分:0)
CQRS是一种应用单一责任原则的架构模式,它通过提供两个模型(读写模型)而不是一个模型来将查询与命令处理分开。因此,如果您在彼此中使用多个查询处理程序和/或命令处理程序,则将错误地使用该模式。
如果您具有非常高的读取次数,则此模式可以使您扩展。因此,它也不是应用于系统的所有有界上下文的架构模式。
答案 3 :(得分:0)
为什么要在命令处理程序中包含查询处理程序?在创建命令之前查询数据,并使用域的所有相关信息填充命令以执行它。
另一方面,在查询处理程序中包含一个命令处理程序听起来非常危险,因为你正在突破相当重要的原则来分离读写。