La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

CQRS Marçal Serrate Software Architect | pasiona consulting blog:

Presentaciones similares


Presentación del tema: "CQRS Marçal Serrate Software Architect | pasiona consulting blog:"— Transcripción de la presentación:

1 CQRS Marçal Serrate Software Architect | pasiona consulting blog:

2 Agenda DDD y CQRS Problemáticas en aplicaciones n-layer Ejemplo CQRS al rescate Task based UI Commands Events … Event Sourcing Snapshots Demo

3 DDD y CQRS Domain-Driven Design Conceptos Ubiquitous Language Entity, Value Object Aggregate Mucho más…. CQRS no sustituye a DDD lo complementa

4 Problemática en aplicaciones típicas n-layer Modelo anémico (getters/setters) Muchas conversiones DTO 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 usuario SaveCustomer CorrectCustomerName, ChangePassword… Verbo imperativo Síncronos / Asíncronos Validar entrada de datos longitud campo texto, campos requeridos, etc.

8 Task based 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 Command Handlers Procesa los Commands ejecutando el correspondiente método de dominio No puede haber lógica de dominio Se ocupa de elementos Cross-Cutting Autorizaciones, Trazas, etc. Ejemplo:

10 Aggregate Root Aggregate: Agrupación lógica de Entities y Value Objects Accedemos a cualquier elemento a través del Aggregate Root Ejemplo:

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

12 Event Handlers 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 Event Sourcing

14 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 + Event Sourcing

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: 1.Adaptar UI «Se está procesando su petición…» Presentar posibles tareas a realizar 2.Educar al cliente 3.Falsear los cambios en cliente… Feo, feo…

18 Demo Ncqrs: Framework de CQRS para.NET Event Sourcing, snapshots RavenDB, MongoDB, MSSQL NServiceBus pero… Demasiado complejo Nuevas versiones no compatibles con antiguas

19 Enlaces Udi Dahan. Greg Young. Jonathan Oliver. Mark Nijhof. Task-Based UI. us/library/ms aspxhttp://msdn.microsoft.com/en- us/library/ms aspx

20 ¿Preguntas? Marçal Serrate Software Architect | pasiona consulting blog:


Descargar ppt "CQRS Marçal Serrate Software Architect | pasiona consulting blog:"

Presentaciones similares


Anuncios Google