CQRS—内部的多个命令/查询处理程序

本文关键字:查询 处理 程序 命令 内部 CQRS | 更新日期: 2023-09-27 18:13:12

在CQRS中使用多个查询处理程序和/或命令处理程序是一个很好的做法吗?还是每个用例只有一个?

  • 命令处理器中的命令处理器
  • 命令处理程序中的查询处理程序
  • 查询处理程序中的查询处理程序
  • 命令处理程序在一个queryhandler ->个人,我不会这样做,因为你不会期望查询应该改变数据…正确吗?

CQRS—内部的多个命令/查询处理程序

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

如果你有非常高的读次数,这个模式可以让你扩展。因此,它也不是应用于系统的所有有界上下文中的架构模式。

不,我不这么认为。

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

第二个优势是可伸缩性。一个实例处理命令,另外5个实例处理请求。因此,理论上,命令代码和查询可以在不同的服务器上执行。同样,不同的查询可能会在不同的服务器上执行,所以包含命令和查询的代码是一个坏主意——扩展将是一个巨大的痛苦。

一些CQRS库事件隔离C &

坏主意。如果处理程序必须做很多事情,比如调用不同的数据库、第三方、外部文件等,那么它应该把这些委托给其他的处理程序,比如存储库等。

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

另一方面,在查询处理程序中包含命令处理程序听起来非常危险,因为您打破了将读和写分开的相当重要的原则。