SlideShare a Scribd company logo
1 of 15
Julio Cesar Avellaneda
MSFT MVP Developer Technologies
julito_gtu@hotmail.com
https://medium.com/@julitogtu
@julitogtu
CQRS (Common Query Responsibility Segregation)
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.
CQRS – Diagrama
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
CQRS
@julitogtu
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.
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.
CQRS – Dos modelos generales
Base de datos compartida
Bases de datos separadas
CQRS – Cómo lucen los comandos
Un comando generalmente hace
referencia a una tarea específica,
permitiendo modelar flujos de negocio
reales.
CQRS – Cómo lucen los queries
Un query permite obtener información
del sistema, debe estar enfocado en la
necesidad puntual del negocio.
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
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
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
CQRS
@julitogtu
CQRS
@julitogtu
• Algunas librerías útiles para implementar CQRS:
• Mediatr: https://github.com/jbogard/MediatR
• Brighter: https://brightercommand.github.io/Brighter/
• NCQRS: https://github.com/pjvds/ncqrs
• EventFlow: https://github.com/eventflow/EventFlow
• CQRS.Net: http://getcqrs.net/

More Related Content

Similar to Introducción a CQRS

Categorias sistemas operativos
Categorias sistemas operativosCategorias sistemas operativos
Categorias sistemas operativosPATRICIOSANTIAGO
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativosjosekb
 
Tema 2 sistemas_de_informacion
Tema 2 sistemas_de_informacionTema 2 sistemas_de_informacion
Tema 2 sistemas_de_informacionTu Tarea
 
Taller TestingUy 2019 - ¡Estresá el sistema, no al usuario!
Taller TestingUy 2019 - ¡Estresá el sistema, no al usuario!Taller TestingUy 2019 - ¡Estresá el sistema, no al usuario!
Taller TestingUy 2019 - ¡Estresá el sistema, no al usuario!TestingUy
 
Construcción unidad completa yanelkys reyes
Construcción unidad completa yanelkys reyesConstrucción unidad completa yanelkys reyes
Construcción unidad completa yanelkys reyesyanelkysr
 
Presentacion del Grupo 6 analisis de sistemas II UNED Costa Rica I Cuatrimest...
Presentacion del Grupo 6 analisis de sistemas II UNED Costa Rica I Cuatrimest...Presentacion del Grupo 6 analisis de sistemas II UNED Costa Rica I Cuatrimest...
Presentacion del Grupo 6 analisis de sistemas II UNED Costa Rica I Cuatrimest...Gustavo Palomo Ureña
 
Descomposición modular y estilos de control
Descomposición modular y estilos de controlDescomposición modular y estilos de control
Descomposición modular y estilos de controlJuan Pablo Bustos Thames
 
LAURITA MARITZA VARGAS VILLACRES_ESTRUCTURA MODULAR
LAURITA MARITZA VARGAS VILLACRES_ESTRUCTURA MODULARLAURITA MARITZA VARGAS VILLACRES_ESTRUCTURA MODULAR
LAURITA MARITZA VARGAS VILLACRES_ESTRUCTURA MODULARLaurita Vargas
 
vOpenvOpenUy: El misterioso CQRS
vOpenvOpenUy: El misterioso CQRSvOpenvOpenUy: El misterioso CQRS
vOpenvOpenUy: El misterioso CQRSfernando sonego
 

Similar to Introducción a CQRS (20)

Categorias sistemas operativos
Categorias sistemas operativosCategorias sistemas operativos
Categorias sistemas operativos
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Base expo
Base expoBase expo
Base expo
 
Sistemas de informacion
Sistemas de informacionSistemas de informacion
Sistemas de informacion
 
Tema 2 sistemas_de_informacion
Tema 2 sistemas_de_informacionTema 2 sistemas_de_informacion
Tema 2 sistemas_de_informacion
 
Taller TestingUy 2019 - ¡Estresá el sistema, no al usuario!
Taller TestingUy 2019 - ¡Estresá el sistema, no al usuario!Taller TestingUy 2019 - ¡Estresá el sistema, no al usuario!
Taller TestingUy 2019 - ¡Estresá el sistema, no al usuario!
 
Construcción unidad completa yanelkys reyes
Construcción unidad completa yanelkys reyesConstrucción unidad completa yanelkys reyes
Construcción unidad completa yanelkys reyes
 
postgress
postgresspostgress
postgress
 
Felipe
FelipeFelipe
Felipe
 
Felipe
FelipeFelipe
Felipe
 
postgress
postgresspostgress
postgress
 
Felipe
FelipeFelipe
Felipe
 
Unidad 1 equipo 4
Unidad 1 equipo 4Unidad 1 equipo 4
Unidad 1 equipo 4
 
Presentación1
Presentación1Presentación1
Presentación1
 
Presentacion del Grupo 6 analisis de sistemas II UNED Costa Rica I Cuatrimest...
Presentacion del Grupo 6 analisis de sistemas II UNED Costa Rica I Cuatrimest...Presentacion del Grupo 6 analisis de sistemas II UNED Costa Rica I Cuatrimest...
Presentacion del Grupo 6 analisis de sistemas II UNED Costa Rica I Cuatrimest...
 
Descomposición modular y estilos de control
Descomposición modular y estilos de controlDescomposición modular y estilos de control
Descomposición modular y estilos de control
 
Estructura modular
Estructura modularEstructura modular
Estructura modular
 
Estructura modular
Estructura modularEstructura modular
Estructura modular
 
LAURITA MARITZA VARGAS VILLACRES_ESTRUCTURA MODULAR
LAURITA MARITZA VARGAS VILLACRES_ESTRUCTURA MODULARLAURITA MARITZA VARGAS VILLACRES_ESTRUCTURA MODULAR
LAURITA MARITZA VARGAS VILLACRES_ESTRUCTURA MODULAR
 
vOpenvOpenUy: El misterioso CQRS
vOpenvOpenUy: El misterioso CQRSvOpenvOpenUy: El misterioso CQRS
vOpenvOpenUy: El misterioso CQRS
 

More from Julito Avellaneda

Bases NoSQL y su implementación con Azure DocumentDB
Bases NoSQL y su implementación con Azure DocumentDBBases NoSQL y su implementación con Azure DocumentDB
Bases NoSQL y su implementación con Azure DocumentDBJulito Avellaneda
 
Introducción a ASPNET vNext
Introducción a ASPNET vNextIntroducción a ASPNET vNext
Introducción a ASPNET vNextJulito Avellaneda
 
Aplicaciones híbridas con Telerik AppBuilder
Aplicaciones híbridas con Telerik AppBuilderAplicaciones híbridas con Telerik AppBuilder
Aplicaciones híbridas con Telerik AppBuilderJulito Avellaneda
 
Aplicaciones híbridas con HTML5, JavaScript e Icenium
Aplicaciones híbridas con HTML5, JavaScript e IceniumAplicaciones híbridas con HTML5, JavaScript e Icenium
Aplicaciones híbridas con HTML5, JavaScript e IceniumJulito Avellaneda
 
JustTrace: Analiza tu aplicación
JustTrace: Analiza tu aplicaciónJustTrace: Analiza tu aplicación
JustTrace: Analiza tu aplicaciónJulito Avellaneda
 

More from Julito Avellaneda (11)

Microservicios I
Microservicios IMicroservicios I
Microservicios I
 
Bases NoSQL y su implementación con Azure DocumentDB
Bases NoSQL y su implementación con Azure DocumentDBBases NoSQL y su implementación con Azure DocumentDB
Bases NoSQL y su implementación con Azure DocumentDB
 
Introducción a ASPNET vNext
Introducción a ASPNET vNextIntroducción a ASPNET vNext
Introducción a ASPNET vNext
 
Aplicaciones híbridas con Telerik AppBuilder
Aplicaciones híbridas con Telerik AppBuilderAplicaciones híbridas con Telerik AppBuilder
Aplicaciones híbridas con Telerik AppBuilder
 
Aplicaciones híbridas con HTML5, JavaScript e Icenium
Aplicaciones híbridas con HTML5, JavaScript e IceniumAplicaciones híbridas con HTML5, JavaScript e Icenium
Aplicaciones híbridas con HTML5, JavaScript e Icenium
 
JustTrace: Analiza tu aplicación
JustTrace: Analiza tu aplicaciónJustTrace: Analiza tu aplicación
JustTrace: Analiza tu aplicación
 
Introducción a Kendo UI
Introducción a Kendo UIIntroducción a Kendo UI
Introducción a Kendo UI
 
Introducción a spa
Introducción a spaIntroducción a spa
Introducción a spa
 
Aspnet MVC 4 y Mobile Sites
Aspnet MVC 4 y Mobile SitesAspnet MVC 4 y Mobile Sites
Aspnet MVC 4 y Mobile Sites
 
Introducción a html5
Introducción a html5Introducción a html5
Introducción a html5
 
jQuery y ASP
jQuery y ASPjQuery y ASP
jQuery y ASP
 

Introducción a CQRS

  • 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
  • 15. CQRS @julitogtu • Algunas librerías útiles para implementar CQRS: • Mediatr: https://github.com/jbogard/MediatR • Brighter: https://brightercommand.github.io/Brighter/ • NCQRS: https://github.com/pjvds/ncqrs • EventFlow: https://github.com/eventflow/EventFlow • CQRS.Net: http://getcqrs.net/