Iniciante Arquitetura de Sistemas

CQRS

CQRS significa Command Query Responsibility Segregation. A ideia é separar o que muda dados (comandos) do que apenas dados (queries). Em vez de um único modelo fazer tudo, você usa caminhos diferentes para escrita e leitura.

O modelo tradicional

Na maioria dos sistemas, o mesmo modelo lê e escreve:

App  <-->  Modelo único  <-->  Banco

Funciona bem na maioria dos casos. CQRS entra quando leitura e escrita têm necessidades muito diferentes.

Com CQRS

Comando (escrita)        Query (leitura)
     |                        |
[ Modelo de escrita ]   [ Modelo de leitura ]
     |                        |
  Banco escrita    --->   Banco leitura
                  (sincroniza)
  • Comando: “criar pedido”, “cancelar”. Altera estado. Não devolve dados.
  • Query: “listar pedidos do cliente”. Só lê. Não muda nada.

Exemplo

// Comando
criarPedido({ cliente, itens })   // muda o estado

// Query
buscarPedidosDoCliente(clienteId) // só lê

Cada lado pode ter seu próprio formato de dados. A leitura pode usar uma tabela já pronta e otimizada para exibição, enquanto a escrita mantém as regras de negócio.

Vantagens

  • Leitura e escrita escalam de forma independente.
  • Consultas rápidas com modelos feitos sob medida.
  • Regras de escrita ficam limpas e focadas.

Desvantagens

  • Mais complexidade: dois modelos para manter.
  • Sincronizar os lados gera consistência eventual.
  • Pode ser exagero para CRUD simples.

Quando usar

CQRS vale a pena quando:

  • Há muito mais leitura que escrita (ou o contrário).
  • As consultas são complexas e diferentes do formato de gravação.
  • Você precisa escalar leitura e escrita separadamente.

Para um cadastro comum, não use. A separação só compensa quando a diferença entre ler e escrever é real e grande.