0Pricing
C# Academy · Aula

Conceitos de CQRS

Separe comandos de consultas para obter clareza.

Conceitos de CQRS é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.

O que é CQRS

CQRS significa Separação de Responsabilidades entre Comandos e Consultas. A ideia é simples: separar o código que altera o estado do código que lê o estado.

// Commands : change state, return little or nothing
// Queries  : return data, change nothing

Comandos

Um comando expressa a intenção de alterar o sistema — criar um order ou cancelar uma assinatura. Ele recebe um nome imperativo e normalmente retorna apenas um identificador ou nada.

public record CreateOrderCommand(int CustomerId, string[] Items);
public record CancelOrderCommand(int OrderId);

Consultas

Uma consulta solicita dados sem efeitos colaterais. Ela recebe um nome relacionado ao que retorna e transporta todos os parâmetros de filtro.

public record GetOrderByIdQuery(int OrderId);
public record ListOrdersQuery(int CustomerId, int Page);

Por que separá-los

Leituras e gravações têm necessidades diferentes:

  • As leituras precisam ser rápidas, desnormalizadas e adequadas ao armazenamento em cache.
  • As gravações precisam de validação, regras de negócio e consistência.

Separá-las permite que cada lado evolua e seja dimensionado de forma independente.

// Read side  -> optimized projections / DTOs
// Write side -> domain rules / transactions

O padrão de handler

Cada comando ou consulta é processado por um handler dedicado. Uma mensagem, um handler, uma responsabilidade — isso mantém as classes pequenas e focadas.

// CreateOrderCommand  -> CreateOrderHandler
// GetOrderByIdQuery    -> GetOrderByIdHandler

Controladores enxutos

Com CQRS, os controladores ficam enxutos. Eles constroem uma mensagem e a encaminham; toda a lógica fica no handler. Isso elimina controladores muito grandes e melhora a capacidade de teste.

[HttpPost]
public async Task<IActionResult> Create(CreateOrderCommand cmd)
{
    var id = await _sender.Send(cmd);
    return CreatedAtAction(nameof(Get), new { id }, null);
}

CQRS não é armazenamento de eventos

Uma confusão comum: CQRS é apenas a separação entre leitura e gravação. O armazenamento de eventos (armazenar o estado como um registro de eventos) é um padrão separado que combina bem com CQRS, mas não é obrigatório.

// You can do CQRS with a plain single database.

Armazenamentos de dados únicos versus separados

O CQRS básico usa um banco de dados para ambos os lados. Configurações avançadas usam armazenamentos separados para leitura e gravação, mantidos em sincronia, aceitando consistência eventual para obter escala. Comece de forma simples.

// Level 1: one DB, separate handlers (most apps)
// Level 2: separate read/write models
// Level 3: separate read/write databases

Benefícios

O CQRS oferece:

  • Handlers claros e com uma única finalidade.
  • Testes mais fáceis — cada handler é testado isoladamente.
  • Um local natural para preocupações transversais, como validação e registro.
  • Dimensionamento independente de leituras e gravações.
// One class per use case = easy to find and test

Custos

O CQRS adiciona mais classes e níveis de indireção. Para um aplicativo CRUD simples, ele pode ser exagerado. Aplique-o quando a lógica de negócio for rica ou o domínio for complexo.

// Trade-off: clarity & scale vs. boilerplate

Conheça o MediatR

A biblioteca MediatR implementa o padrão de mediador no processo, que encaminha cada mensagem ao seu handler, para que você não precise conectá-los manualmente. O restante deste curso usa essa biblioteca.

dotnet add package MediatR

Verificação rápida

Confirme a distinção fundamental.

Recapitulação

Você aprendeu os conceitos de CQRS:

  • Separe comandos (alterações de estado) de consultas (leituras).
  • Cada mensagem tem um handler focado, mantendo os controladores enxutos.
  • O CQRS é independente do armazenamento de eventos e pode usar um único banco de dados.
  • O MediatR encaminha mensagens aos componentes handler.

Próximo tópico: comandos e handlers com MediatR.

Perguntas Frequentes

A aula “Conceitos de CQRS” é grátis?

Sim — o texto completo de “Conceitos de CQRS” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.

O que vou aprender em “Conceitos de CQRS”?

Separe comandos de consultas para obter clareza. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Conceitos de CQRS”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Conceitos de CQRS
  2. Comandos e manipuladores com MediatR
  3. Comportamentos de pipeline
  4. Notificações e eventos
← Voltar para C# Academy