O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Introducción a CQRS

106 visualizações

Publicada em

Introducción a CQRS

Publicada em: Software
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Introducción a CQRS

  1. 1. Julio Cesar Avellaneda MSFT MVP Developer Technologies julito_gtu@hotmail.com https://medium.com/@julitogtu @julitogtu CQRS (Common Query Responsibility Segregation)
  2. 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.
  3. 3. CQRS – Diagrama
  4. 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
  5. 5. CQRS @julitogtu
  6. 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. 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. 8. CQRS – Dos modelos generales Base de datos compartida Bases de datos separadas
  9. 9. CQRS – Cómo lucen los comandos Un comando generalmente hace referencia a una tarea específica, permitiendo modelar flujos de negocio reales.
  10. 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. 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. 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. 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
  14. 14. CQRS @julitogtu
  15. 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/

×