Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porYesenia Subia Modificado hace 10 años
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:
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.