Por que não uso MediatR para CQRS
Cezary Piatek argumenta que MediatR é uma boa implementação do padrão mediator — mas o mediator pattern resolve um problema diferente do CQRS. Usar MediatR para CQRS introduz fricção desnecessária em algo fundamentalmente simples.
O argumento central: o CQRS exige separação clara entre leitura e escrita. O MediatR não tem os conceitos de Command e Query — só tem Request. Você pode criar interfaces de marcação por cima, mas aí está recriando as 4 interfaces que o padrão CQRS já define nativamente, enquanto luta contra uma biblioteca que não foi desenhada para isso.
O “Vanilla CQRS” precisa de apenas 4 interfaces:
interface IQueryHandler<in TQuery, TQueryResult>
interface IQueryDispatcher
interface ICommandHandler<in TCommand, TCommandResult>
interface ICommandDispatcherCom dispatchers separados para commands e queries, cross-cutting concerns (cache, auditoria, retry, Unit of Work) ficam em decorators limpos — sem if (request is IQuery<T>) espalhados pelo pipeline do MediatR.
A popularidade do MediatR em apps CQRS parece ser um cargo cult com raízes em má compreensão do padrão.
