Conceptos de CQRS
Separe los comandos de las consultas para mejorar la claridad.
Conceptos de CQRS es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 4 lecciones en total.
¿Qué es CQRS?
CQRS significa Command Query Responsibility Segregation. La idea es sencilla: separar el código que modifica el estado (comandos) del código que lee el estado (consultas).
// Commands : change state, return little or nothing
// Queries : return data, change nothingComandos
Un comando expresa la intención de modificar el sistema: crear un pedido o cancelar una suscripción. Se nombra con un verbo en imperativo y normalmente solo devuelve un id o nada.
public record CreateOrderCommand(int CustomerId, string[] Items);
public record CancelOrderCommand(int OrderId);Consultas
Una consulta solicita datos sin efectos secundarios. Se denomina según lo que devuelve y contiene cualquier parámetro de filtro.
public record GetOrderByIdQuery(int OrderId);
public record ListOrdersQuery(int CustomerId, int Page);¿Por qué separarlos?
Las lecturas y las escrituras tienen necesidades diferentes:
- Las lecturas deben ser rápidas, desnormalizadas y adecuadas para la caché.
- Las escrituras necesitan validación, reglas de negocio y coherencia.
Separarlas permite que cada parte evolucione y escale de forma independiente.
// Read side -> optimized projections / DTOs
// Write side -> domain rules / transactionsEl patrón de los handlers
Cada comando o consulta es procesado por un handler específico. Un mensaje, un handler y una responsabilidad; así las clases se mantienen pequeñas y centradas.
// CreateOrderCommand -> CreateOrderHandler
// GetOrderByIdQuery -> GetOrderByIdHandlerControladores delgados
Con CQRS, los controladores son delgados. Construyen un mensaje y lo envían; toda la lógica reside en el handler. Esto elimina los controladores demasiado cargados y mejora la capacidad de prueba.
[HttpPost]
public async Task<IActionResult> Create(CreateOrderCommand cmd)
{
var id = await _sender.Send(cmd);
return CreatedAtAction(nameof(Get), new { id }, null);
}CQRS no es Event Sourcing
Es común confundirlos: CQRS solo separa las lecturas de las escrituras. Event sourcing (almacenar el estado como un registro de eventos) es un patrón independiente que combina bien con CQRS, pero no es obligatorio.
// You can do CQRS with a plain single database.Un único almacén de datos frente a almacenes separados
El CQRS básico usa una única base de datos para ambas partes. Las configuraciones avanzadas usan almacenes de lectura y escritura separados, sincronizados entre sí, y aceptan la consistencia eventual para escalar. Empiece por algo sencillo.
// Level 1: one DB, separate handlers (most apps)
// Level 2: separate read/write models
// Level 3: separate read/write databasesVentajas
CQRS le ofrece:
- Handlers claros y con un único propósito.
- Pruebas más sencillas: cada handler se prueba de forma aislada.
- Un lugar natural para los aspectos transversales (validación, registro).
- Escalado independiente de las lecturas y las escrituras.
// One class per use case = easy to find and testCostes
CQRS añade más clases y niveles de indirección. Para una aplicación CRUD sencilla puede ser excesivo. Aplíquelo cuando la lógica de negocio sea compleja o el dominio sea sofisticado.
// Trade-off: clarity & scale vs. boilerplateIntroducción a MediatR
La biblioteca MediatR implementa el patrón mediator en proceso, que envía cada mensaje a su handler, por lo que no tiene que conectarlos manualmente. El resto de este curso lo utiliza.
dotnet add package MediatRComprobación rápida
Confirme la distinción fundamental.
Resumen
Ha aprendido los conceptos de CQRS:
- Separe los comandos (cambios de estado) de las consultas (lecturas).
- Cada mensaje tiene un handler centrado en una tarea, lo que mantiene delgados los controladores.
- CQRS es independiente de Event Sourcing y puede usar una única base de datos.
- MediatR envía los mensajes a los handlers.
A continuación: comandos y handlers con MediatR.
Preguntas frecuentes
¿La lección «Conceptos de CQRS» es gratis?
Sí — el texto completo de «Conceptos de CQRS» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Conceptos de CQRS»?
Separe los comandos de las consultas para mejorar la claridad. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C# Academy?
No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Conceptos de CQRS»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C# Academy?
Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Conceptos de CQRS
- Comandos y handlers con MediatR
- Comportamientos del pipeline
- Notificaciones y eventos