Pular para o conteúdo
.NETCQRS e padrão Mediator
Módulo 07Tópicos Avançados (Bônus)

CQRS e padrão Mediator

avancado 35 min de leitura·Atualizado · .NET 9
Resumo

CQRS separa operações de leitura (queries) das de escrita (commands). O padrão Mediator desacopla quem envia a requisição de quem a trata. Juntos, organizam a aplicação em handlers focados.

1. Objetivos de Aprendizagem#

  • Explicar CQRS e seus prós/contras.
  • Descrever o padrão Mediator.
  • Entender quando (e quando não) adotar CQRS.

2. Pré-requisitos#

  • Código assíncrono (Módulo 28).

3. Conceito#

  • CQRS (Command Query Responsibility Segregation): separa o modelo de escrita (commands, que alteram estado) do de leitura (queries, que retornam dados). Podem até usar modelos/bancos distintos.
  • Mediator: em vez de o controller chamar serviços diretamente, ele envia uma mensagem a um mediador, que a roteia ao handler correto.

O porquê: handlers pequenos e coesos (um por caso de uso), fácil de testar e evoluir. O tradeoff: mais arquivos e indireção — pode ser exagero em CRUDs simples.

4. Mão na Massa#

4.1. Setup#

Conceitual; a implementação com MediatR começa no próximo tópico.

4.2. Implementação Passo a Passo#

Visão do fluxo com Mediator:

Carregando diagrama…

Comparação:

AspectoVantagemDesvantagem
Separação leitura/escritaModelos otimizados por finalidadeMais código e duplicação de modelos
Handlers isoladosTestáveis e coesosIndireção dificulta rastrear o fluxo
EscalabilidadeLer e escrever escalam separadoComplexidade operacional (2 modelos)

4.3. Executando#

Sem execução ainda; nos próximos tópicos implementamos com MediatR.

5. Exemplo Completo#

Um caso de uso vira um par mensagem + handler, por exemplo GetProdutosQuery/GetProdutosHandler (leitura) e CreateProdutoCommand/CreateProdutoHandler (escrita).

6. Boas Práticas e Armadilhas#

FaçaEvite
Adotar CQRS onde leitura e escrita divergem de verdadeAplicar CQRS em CRUD trivial
Handlers pequenos, um por caso de usoHandlers "faz-tudo"
Documentar o fluxo para novos devsDeixar a indireção sem mapa
Atenção

CQRS não exige dois bancos. A forma mais simples é apenas separar commands de queries no mesmo banco. Bancos separados são um passo adicional, só quando justificado.

7. Segurança e Produção#

  • Handlers isolados facilitam aplicar autorização e validação por caso de uso (ver behaviors, tópico 44.4).

8. Exercícios#

  • Fácil: liste 3 queries e 3 commands da API de catálogo.
  • Médio: explique um cenário onde modelos de leitura/escrita diferentes ajudam.
  • Desafio: descreva quando CQRS seria overengineering no seu contexto.

9. Resumo#

CQRS separa leitura de escrita; o Mediator desacopla emissor e handler. Juntos favorecem coesão e testabilidade, ao custo de mais indireção — a adotar com critério.

10. Próximos Passos#

A seguir, implementamos requests e commands com MediatR.

11. Referências#

44-02 — CQRS e padrão Mediator | Curso ASP.NET Core