1. Julio Cesar Avellaneda
MSFT MVP Developer Technologies
julito_gtu@hotmail.com
https://medium.com/@julitogtu
@julitogtu
CQRS (Common Query Responsibility Segregation)
2. CQRS
@julitogtu
• Generalmente, cualquier acción de un sistema se puede categorizar en alguna de las dos siguientes acciones:
• Query: Operación que no altera el estado del sistema y retorna datos.
• Command: Operación que modifica el estado del sistema.
• Un solo modelo de dominio utilizado tanto para queries como para commands no ejemplifica claramente la
diferencia entre las dos acciones agregando complejidad y complejidad innecesaria.
• CQRS tiene como objetivo tratar de una mejor forma la diferencia entre las responsabilidad de los queries y de
los commands.
4. CQRS
@julitogtu
• Generalmente, cualquier acción de un sistema se puede categorizar en alguna de las dos siguientes acciones:
• Query: Operación que no altera el estado del sistema y retorna datos.
• Command: Operación que modifica el estado del sistema.
Query
Command
Operaciones de lectura
Operaciones de escritura
6. CQRS
Beneficios
@julitogtu
• Simplificación del diseño: Definición de modelos acordes a cada operación.
• Escalabilidad independiente: Al tener diferentes modelos, si estos se encuentran desacoplados, cada lado de
CQRS (queries/commands) pueden escalar de forma independiente sin afectar el otro.
• Mantenibilidad: Al tener modelos diferentes, la complejidad de cada sistema, módulo u operación es menor,
por lo tanto más sencilla de mantener.
• Extensibilidad: Al tener los dos mundos separados, cambios o nuevas características pueden ser
implementados sin afectar la otra parte.
• Equipos diferentes.
7. CQRS
Un comando es la única vía en que se
puede alterar el sistema, tienen como
responsabilidad realizar cambios en el
sistema.
Command Query
Un query está asociado siempre a una
operación de lectura, se encarga de leer
la información y transformarla.
8. CQRS – Dos modelos generales
Base de datos compartida
Bases de datos separadas
9. CQRS – Cómo lucen los comandos
Un comando generalmente hace
referencia a una tarea específica,
permitiendo modelar flujos de negocio
reales.
10. CQRS – Cómo lucen los queries
Un query permite obtener información
del sistema, debe estar enfocado en la
necesidad puntual del negocio.
11. CQRS
Read Model
@julitogtu
• Modelo sencillo por su naturaleza de solo permitir consultas.
• Posibilidad de usar elementos de solo lectura.
• Contextos limitados a solo exponer datos de lectura.
• Diferente stack de acceso a datos (ORM, Micro-ORMs, ADO.NET)
• Modelos de persistencia pensados el alta concurrencia y rápida al ser consultados:
• Bases de datos en memoria
• Motores de búsqueda
• Bases de datos no-relacionales
12. CQRS
Query
@julitogtu
Un query es una operación de lectura, se encarga de leer el estado del
sistema, realizar filtros, consulta agregados y transforma los datos en el
formato más adecuado. Un query puede ejecutarse n-veces ya que no
altera el resultado del sistema y siempre debe obtener el mismo
resultado.
Un query define básicamente dos elementos:
• Query
• Query Handler
13. CQRS
Command
@julitogtu
• Modelo con reglas de negocio definidas.
• Única forma de alterar el estado del sitema.
• Generalmente no retornan datos.
• Generalmente un comando tiene asociados eventos.
• Los comandos hacen referencia a las acciones que pueden ocurrir.
• Los eventos hacen referencias a las acciones que ocurrieron.
• Un evento puede tener mùltiples handlers.
• Dos partes:
• Command
• CommandHandler