Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CQRS

 CQRS

Meetup del 25/01/2017 para el grupo de usuarios PHP Madrid

Avatar for Adoración González Toboso

Adoración González Toboso

January 26, 2017
Tweet

More Decks by Adoración González Toboso

Other Decks in Programming

Transcript

  1. • Adoración González • Ingeniero en Informática, UCM • PHP

    Senior software developer • @srtaDeveloper • Coleccionista de • elePHPantes • Paracaidista
  2. CQRS Distinguimos 2 modelos que coexisten en una aplicación. 

    Modelo que crea, actualiza y borra. (Escritura)  Modelo que lee y consume información. (Lectura)
  3. Modelo de Escritura-COMANDOS  Representan las operaciones que se pueden

    hacer.  Son DTOs de transporte de inputs entre cliente y la aplicación  Parámetros variables según tipo de operación.  Especificación basada en tareas.
  4. SERVICIOS DE APLICACIÓN (HANDLER)  Ejecutan comandos  Contienen la

    lógica de negocio.  Validan reglas de negocio.  Realizan las operaciones concretas.  Llamadas a factorías y repositorios.  La lógica NO utiliza el modelo de lectura para obtener información.
  5. Concurrencia de Comandos  Ejecución concurrente de operaciones sobre una

    misma entidad.  Posibles operaciones inválidas en la aplicación.  Anticipar condiciones de carrera  Gestión de errores
  6. Modelo de Lectura-Queries  Hacemos consultas sobre vistas ó proyecciones

    que contienen información de nuestro modelo.  Las vistas o proyecciones son estructuras ajustadas a la representación que queremos hacer de los datos. • Vistas de formularios, listados, reports…  Capa de lógica pequeña para gestionar las consultas y acceder a la infraestructura para leer.
  7. Sincronización y consistencia eventual. Problema: Cuanto tiempo pasa desde que

    se consolida el estado de una operación hasta que se actualizan las proyecciones de los datos.  El estado actual no está disponible inmediatamente.  Actualizaciones asíncronas.
  8. CQRS + Event Sourcing Persistimos secuencia ordenada de eventos ocurridos

    en el modelo de escritura en lugar del estado actual de una entidad. UPDATE tabla_de_entidades SET estado = ‘delivered’ WHERE id = 589323  Unifica la forma en la que fluyen los datos entre un modelo y otro.  Conservamos todo el historial de operaciones sobre los agregados del modelo negocio.
  9. CQRS + Event Sourcing l Eventos inmutables. l Parámetros variables

    dependiendo del tipo de evento. l Se persisten y no se borran. l No se modifican, si se necesitan más parámetros se cambia la versión del evento.
  10. Ideas importantes.  Adquirir una solución de compromiso entre la

    mejora de rendimiento y las necesidades de consistencia de nuestra aplicación. Y en base a eso decidir que estrategia seguir.  Si implementamos CQRS sobre una aplicación legacy hacerlo de forma incremental.  Si implementamos CQRS sobre DDD elegir el bounded context que requiera esta solución.
  11. VENTAJAS  Responsabilidades bien definidas.  Posibles optimizaciones adecuadas a

    cada modelo.  Mejora el rendimiento.  Facilita la escalabilidad.
  12. INCONVENIENTES  Añade complejidad adicional al modelo de negocio. 

    Dificultad para implementar la gestión de la sincronización entre modelos.  Consistencia no inmediata.
  13. Referencias  http://udidahan.com/2009/12/09/clarified-cqrs/  https://martinfowler.com/bliki/CQRS.html  https://goodenoughsoftware.net/2012/03/02/cqrs/  http://danielwhittaker.me/ 

    Ricardo Borillo - CQRS y los beneficios surgidos de la necesidad  Diego Moreno - Más allá del CRUD… (charla Codemotion 2016)  Implementing Domain Driven Design. Vaughn Vernon  Antonio J. García Lagar @ajgarlag