1 / 20

CQRS

CQRS. Marçal Serrate Software Architect | pasiona consulting twitter : @ mserrate b log: http://www.serrate.es e mail: m.serrate@gmail.com. Agenda. DDD y CQRS Problemáticas en aplicaciones n- layer Ejemplo CQRS al rescate Task based UI Commands Events … Event Sourcing

donnan
Download Presentation

CQRS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CQRS MarçalSerrate Software Architect | pasionaconsulting twitter: @mserrate blog: http://www.serrate.es email: m.serrate@gmail.com

  2. Agenda • DDD y CQRS • Problemáticas en aplicaciones n-layer • Ejemplo • CQRS al rescate • Taskbased UI • Commands • Events • … • EventSourcing • Snapshots • Demo

  3. DDD y CQRS • Domain-DrivenDesign • Conceptos • UbiquitousLanguage • Entity, ValueObject • Aggregate • Mucho más…. • CQRS no sustituye a DDDlo complementa

  4. Problemática en aplicaciones típicas n-layer • Modelo anémico(getters/setters) • Muchas conversionesDTO  Entidad • Único modelo para: • Lecturas • Escrituras • Búsquedas • Reporting

  5. CQRS al rescate Para evitar lo anterior… Separar lecturas de escrituras

  6. CQRS al rescate

  7. Commands • Capturar la intención del usuarioSaveCustomer CorrectCustomerName, ChangePassword… • Verbo imperativo • Síncronos / Asíncronos • Validar entrada de datoslongitud campo texto, campos requeridos, etc.

  8. Taskbased UI • Orientar cada pantalla a una única tarea • Título de la pantalla explícito y conciso • El contenido debe ajustarse a la tarea • Ofrecer enlaces a tareas secundarias vs

  9. CommandHandlers • Procesa los Commands ejecutando el correspondiente método de dominio • No puede haber lógica de dominio • Se ocupa de elementos Cross-CuttingAutorizaciones, Trazas, etc. • Ejemplo:

  10. AggregateRoot • Aggregate: Agrupación lógica de Entities y ValueObjects • Accedemos a cualquier elemento a través del AggregateRoot • Ejemplo:

  11. Events • Representan el cambio de estado del Aggregate al procesar un Command • Verbo pasado: Acción completada • Ejemplo:

  12. EventHandlers • Procesa los Events para insertarlos en el almacenamiento de lectura • Actúa como Denormalizador(1:1) • Puede realizar operaciones Cross-Cutting • Ejemplo:

  13. CQRS: Perspectiva 2-Phase Commit • Asegurarnos la publicación en ambos almacenes • Modelos desincronizados Soluciones: • MSDTC • EventSourcing

  14. EventSourcing • Almacén escritura == Log de todos los eventos • No existe DELETE. Sólo añadimos eventos • Para obtener el estado actual basta con aplicar todos los eventos • Puede actuar como cola de eventos, evitando 2PC • Escalabilidad. Partición horizontal sencilla: Aggregate ID ¿Qué pasa si existen millones de eventos?

  15. Snapshots • Cada n eventos almacenar el estado actual del Aggregate • Para cargarlo, obtenemos el snapshot y aplicamos los eventos que han ocurrido desde que se almacenó

  16. CQRS + EventSourcing

  17. Eventual Consistency «Retraso entre almacén escritura y lectura» • Usuarios ven datos antiguos ≠ inconsistentes • Normalmente es así por rendimiento y alta disponibilidad (p.e. Cache) Soluciones: • Adaptar UI • «Se está procesando su petición…» • Presentar posibles tareas a realizar • Educar al cliente • Falsear los cambios en cliente… Feo, feo…

  18. Demo Ncqrs: Framework de CQRS para .NET • http://ncqrs.org • EventSourcing, snapshots • RavenDB, MongoDB, MSSQL • NServiceBuspero… • Demasiado complejo • Nuevas versiones no compatibles con antiguas

  19. Enlaces • UdiDahan. http://www.udidahan.com/ • Greg Young. http://codebetter.com/gregyoung/ • Jonathan Oliver. http://blog.jonathanoliver.com/ • Mark Nijhof. http://cre8ivethought.com/blog/index • Task-BasedUI. http://msdn.microsoft.com/en-us/library/ms997506.aspx

  20. ¿Preguntas? MarçalSerrate Software Architect| pasionaconsulting twitter: @mserrate blog: http://www.serrate.es email: m.serrate@gmail.com

More Related