La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

CQRS Marçal Serrate Software Architect | pasiona consulting

Presentaciones similares


Presentación del tema: "CQRS Marçal Serrate Software Architect | pasiona consulting"— 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 CQRS no sustituye a DDD lo complementa
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
vs 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

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 ¿Qué pasa si existen millones de eventos?
Event Sourcing 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: 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
Event Sourcing, snapshots RavenDB, MongoDB, MSSQL NServiceBus pero… Demasiado complejo Nuevas versiones no compatibles con antiguas

19 Enlaces Udi Dahan. http://www.udidahan.com/
Greg Young. Jonathan Oliver. Mark Nijhof. Task-Based UI.

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


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

Presentaciones similares


Anuncios Google