SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
Grails
DDD
EventSourcing
CQRS
Jorge Franco - Osoco
• Cerca de 20 años desarrollando

• Grooscript

• 5 años en Osoco, trabajando con Groovy y Java

• @jfrancoleza

• jorge.franco.leza@gmail.com
Agenda
• Groovy & Grails

• DDD

• Event Sourcing

• CQRS

• Axon Framework

• Nuestra aplicación

• Conclusiones
Groovy
• Utilizado en Osoco desde los inicios

• Lenguaje de la JVM, Apache 2

• Java con esteroides

• Dinámico, opcionalmente tipado

• Fácil de leer, elegante, conciso

• Herencia múltiple? Traits

• Testing maravilloso con Spock y Geb
Grails
• Mantenido OCI, Apache 2

• Convención sobre configuración

• Una capa encima de Spring Boot

• Buen ecosistema de plugins

• Gorm

• Diferentes profiles
Grails tips
• Haz muchos tests.

• Si vas a integrarte con otras librerías o frameworks, pruébalo
antes.

• Pon tu código del dominio en src/main/groovy.

• Usa las clases Gorm sólo en repositorios.

• Si vas a usar @Autowired, asegurarte de que funciona en
producción.

• Codenarc y Open Clover.
Domain Driven Design
• Foco en el dominio y en su lógica

• Lenguaje Ubicuo

• Bounded contexts, no tiene que ser uno por microservicio

• Agregados, entidades, value objects
DDD Tips
• No empieces con una fiesta de bounded contexts.

• Define bien la paquetería, separación por bounded contexts.

• Ten claros cuales son los puntos de entrada a tu dominio.

• Pon en común con el equipo que es una invariante, que es
una validación, y donde las hacéis.

• Diferenciad value objects de entidades.

• http://danielwhittaker.me/2015/07/05/are-you-making-
these-10-ddd-mistakes/
Event Sourcing
• Aplicación tiene estado

• Se reciben y se producen eventos

• El estado puede cambiar por los eventos

• Los eventos se procesan uno tras otro, en secuencia

• Podemos volver a un estado de nuestra aplicación,
volviendo a aplicar los eventos
ES Tips
• Las sesiones de event storming ayudan a identificar los
eventos de tu aplicación.

• Evita hacer muchas conversiones de objetos o busca una
forma fácil de realizarlas.

• Prepara tu sistema para volver a cargar los eventos.

• Define como otros bounded contexts pueden escuchar
tus eventos.
CQRS
• Modelo de lectura y modelo de escritura

• Query model & Command model

• Enriquecer el modelo de lectura para las necesidades de
la aplicación (Ej: las vistas)

• Información está en varios sitios
CQRS Tips
• Los identificadores deben ser únicos y no modificables
por el usuario.

• Define cuales son las vistas, no guardes en el modelo de
lectura más de lo que necesitas.

• Puede que tu aplicación falle al guardar en el modelo de
lectura y no te enteres.
Axon Framework
• Apache 2, Java, http://www.axonframework.org

• CQRS and Event Sourcing friendly

• Agregado recibe comandos

• Los comandos generan eventos

• Eventos en el agregado para el modelo de escritura

• Eventos para modificar el modelo de lectura

• Identificador único para cada agregado

• Se lleva bien con spring, es fácil configurar Mongo
class ContractCreateCommand {
@TargetAggregateIdentifier
String id
//Command properties
}
@Aggregate
class Contract {
@AggregateIdentifier
String id
@CommandHandler
Contract(ContractCreateCommand command) {
AggregateLifecycle.apply(new ContractCreatedEvent()))
}
@EventSourcingHandler
void onCreate(ContractCreatedEvent event) {
//Hacemos cosas en el agregado
}
}
@EventHandler
void onEvent(ClientCreatedEvent clientCreatedEvent) {
//Guardamos en el modelo de lectura
}
Comando
Evento Cambiamos el modelo
Evento se persiste Persistimos en el 

modelo de lectura
Consulta
Obtenemos la información

del modelo de lectura
Nuestra aplicación
• Gestión de los clientes y sus cuentas de inversión.

• Tener claro qué va pasando y quién va haciendo las cosas.

• Personas, clientes, contratos, cuentas, gestores, honorarios.

• Aplicación grails con axon, datos en postgres, eventos en
mongo, gorm, plugin spring security, google oauth, jquery.

• Procesado de ficheros de bancos y mucha gestión de
documentos.

• Despliegue en AWS con Terraform.
BO Grails
Mongo
Postgres
Procesador
de ficheros
Modelo
Común
Query
En el BackOffice
• Los controladores grails son nuestros puntos de entrada

• Lógica de dominio en src/main/groovy

• Los dominios tienen puntos de entrada que son llamados
desde los controladores

• Tenemos entidades Gorm en src/main/groovy y en la
librería compartida

• Duplicación entre agregados y modelo de lectura,
muchas conversiones
Tip
Controlador
Action
Entrada al
dominio
Caso
de Uso
Consulta
Repositorio
Guardar
Repositorio
class ContractController {
def create(ContractGrailsCommand command) {
if (command.hasErrors()) {
//devolvemos errores a la vista
}
Result result = createContractAction.with(command)
if (result.hasErrors()) {
//devolvemos errores a la vista
} else {
//all ok!
}
}
class CreateContractAction {
ClientsApplicationService clientsApplicationService
Result with(ContractGrailsCommand command) {
//Lógica que no sea de dominio
//Acceder a diferentes bounded contexts
//Convertir los comandos?
clientsApplicationService.createContract(command)
}
}
class CreateContractUseCase {
//Cualquier uso de Gorm sólo en los repositorios
ContractsRepository contractsRepository
Result<String> perform(ContractCommand command) {
//Aqui toda la logice de dominio
def (errors, contract) = createContractFrom command
if (!errors) {
//Guardar en el repositorio o repositorios
Result.from contractsRepository.create(contract).id
} else {
Result.fromErrors errors
}
}
}
Conclusiones
DDD nos da muchos beneficios. 

Separación de la lógica de nuestro dominio del resto. 

Hay que hablar mucho en el equipo cómo y dónde hacer las
cosas, validaciones, servicios, adaptadores, … 

Evita que la arquitectura te guíe a la hora de construir el modelo
Axon funciona bien.

Pruébalo antes de empezar a usarlo.

Ten claro lo que hace para aprovecharlo.

Centra mucho la lógica en los agregados y los ensucia. 

Hay que hacer muchas conversiones.

Cuidado con las ‘serializaciones’.
Grails encaja a la hora de realizar un backoffice.

Es lento y pesado.

Cuesta sacar clases Gorm fuera de la aplicación. 

Los gsp’s son cosa del pasado. 

Requiere mucha memoria.
Resumen
• DDD Sí. Hay que dedicarle tiempo y reuniones.

• Grails, sólo para backoffice’s. Si vas a empezar con él
sobrecargándolo, mejor piensa en usar otra cosa.

• Event sourcing y CQRS, ¿te hace falta?.

• Ahora mismo ya no usamos axon, ni eventos ni CQRS.

• No empieces una aplicación complicando la vida.

• No metas muchas cosas nuevas a la vez.
Q & A
Muchas Gracias!

Mais conteúdo relacionado

Mais procurados

Node.js - un poco de informacion.
Node.js - un poco de informacion.Node.js - un poco de informacion.
Node.js - un poco de informacion.Luis Toscano
 
Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesJobsket
 
Jobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket
 

Mais procurados (6)

Nodejs
NodejsNodejs
Nodejs
 
Node.js - un poco de informacion.
Node.js - un poco de informacion.Node.js - un poco de informacion.
Node.js - un poco de informacion.
 
Presentacion node
Presentacion nodePresentacion node
Presentacion node
 
Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agiles
 
Taller Grails
Taller GrailsTaller Grails
Taller Grails
 
Jobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket Spring 2GX Madrid
Jobsket Spring 2GX Madrid
 

Semelhante a ¿Grails + DDD + Eventsourcing + CQRS?

Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJSRodrigo Pimentel
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasCarlos Camacho
 
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHP
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHPIntroducción a Silex. Aprendiendo a hacer las cosas bien en PHP
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHPDaniel Primo
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...Miguel Ángel Sánchez Chordi
 
Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2Ignacio Muñoz Vicente
 
Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grailsbetabeers
 
Web framework ligeros y micros en java barcamp 2014
Web framework ligeros y micros en java   barcamp 2014Web framework ligeros y micros en java   barcamp 2014
Web framework ligeros y micros en java barcamp 2014Carlos Camacho
 
Automatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & CucumberAutomatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & CucumberSoftware Guru
 
Frameworks de Desarrollo Web Grails
Frameworks de Desarrollo Web GrailsFrameworks de Desarrollo Web Grails
Frameworks de Desarrollo Web GrailsEsteban Saavedra
 
Desymfony - Servicios
Desymfony  - ServiciosDesymfony  - Servicios
Desymfony - ServiciosRicard Clau
 

Semelhante a ¿Grails + DDD + Eventsourcing + CQRS? (20)

Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
 
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHP
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHPIntroducción a Silex. Aprendiendo a hacer las cosas bien en PHP
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHP
 
Introducción a groovy & grails
Introducción a groovy & grailsIntroducción a groovy & grails
Introducción a groovy & grails
 
Grails barcamp 2013
Grails barcamp 2013Grails barcamp 2013
Grails barcamp 2013
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
 
Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2
 
Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grails
 
Metadata api en apex
Metadata api en apexMetadata api en apex
Metadata api en apex
 
Web framework ligeros y micros en java barcamp 2014
Web framework ligeros y micros en java   barcamp 2014Web framework ligeros y micros en java   barcamp 2014
Web framework ligeros y micros en java barcamp 2014
 
Integrando AngularJS y drupal
Integrando AngularJS y drupalIntegrando AngularJS y drupal
Integrando AngularJS y drupal
 
Taller de Grails
Taller de GrailsTaller de Grails
Taller de Grails
 
JS Patterns Applied to a Real World Example
JS Patterns Applied to a Real World ExampleJS Patterns Applied to a Real World Example
JS Patterns Applied to a Real World Example
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Terraform Ansible v3.0
Terraform Ansible v3.0Terraform Ansible v3.0
Terraform Ansible v3.0
 
Angular Fundamentals
Angular FundamentalsAngular Fundamentals
Angular Fundamentals
 
Automatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & CucumberAutomatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & Cucumber
 
Semana 2 Configuración entorno de desarrollo
Semana 2   Configuración entorno de desarrolloSemana 2   Configuración entorno de desarrollo
Semana 2 Configuración entorno de desarrollo
 
Frameworks de Desarrollo Web Grails
Frameworks de Desarrollo Web GrailsFrameworks de Desarrollo Web Grails
Frameworks de Desarrollo Web Grails
 
Desymfony - Servicios
Desymfony  - ServiciosDesymfony  - Servicios
Desymfony - Servicios
 

Mais de Jorge Franco Leza

Mais de Jorge Franco Leza (6)

Grooscript and Grails 3
Grooscript and Grails 3Grooscript and Grails 3
Grooscript and Grails 3
 
Grooscript in Action SpringOne2gx 2015
Grooscript in Action SpringOne2gx 2015Grooscript in Action SpringOne2gx 2015
Grooscript in Action SpringOne2gx 2015
 
Grooscript gr8conf 2015
Grooscript gr8conf 2015Grooscript gr8conf 2015
Grooscript gr8conf 2015
 
Grooscript greach 2015
Grooscript greach 2015Grooscript greach 2015
Grooscript greach 2015
 
Grooscript greach
Grooscript greachGrooscript greach
Grooscript greach
 
Sobre GrooScript
Sobre GrooScriptSobre GrooScript
Sobre GrooScript
 

Último

PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOFritz Rebaza Latoche
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023RonaldoPaucarMontes
 
27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.pptjacnuevarisaralda22
 
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico EcuatorianoEstadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico EcuatorianoEduardoBriones22
 
2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologica2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologicaJUDITHYEMELINHUARIPA
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptxBRAYANJOSEPTSANJINEZ
 
PostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDPostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDEdith Puclla
 
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.pptoscarvielma45
 
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfMODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfvladimirpaucarmontes
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaAlexanderimanolLencr
 
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptxCALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptxCarlosGabriel96
 
ingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptxingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptxjhorbycoralsanchez
 
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNATINSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNATevercoyla
 
Quimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfQuimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfs7yl3dr4g0n01
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Dr. Edwin Hernandez
 
Gestion de proyectos para el control y seguimiento
Gestion de proyectos para el control  y seguimientoGestion de proyectos para el control  y seguimiento
Gestion de proyectos para el control y seguimientoMaxanMonplesi
 
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTAPORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTElisaLen4
 
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)Ricardo705519
 
nomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesnomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesCarlosMeraz16
 
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptTippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptNombre Apellidos
 

Último (20)

PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
 
27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt
 
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico EcuatorianoEstadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
 
2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologica2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologica
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
 
PostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDPostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCD
 
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
 
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfMODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiología
 
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptxCALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
 
ingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptxingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptx
 
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNATINSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
 
Quimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfQuimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdf
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...
 
Gestion de proyectos para el control y seguimiento
Gestion de proyectos para el control  y seguimientoGestion de proyectos para el control  y seguimiento
Gestion de proyectos para el control y seguimiento
 
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTAPORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
 
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
 
nomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesnomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestaciones
 
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptTippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
 

¿Grails + DDD + Eventsourcing + CQRS?

  • 2. • Cerca de 20 años desarrollando • Grooscript • 5 años en Osoco, trabajando con Groovy y Java • @jfrancoleza • jorge.franco.leza@gmail.com
  • 3. Agenda • Groovy & Grails • DDD • Event Sourcing • CQRS • Axon Framework • Nuestra aplicación • Conclusiones
  • 4. Groovy • Utilizado en Osoco desde los inicios • Lenguaje de la JVM, Apache 2 • Java con esteroides • Dinámico, opcionalmente tipado • Fácil de leer, elegante, conciso • Herencia múltiple? Traits • Testing maravilloso con Spock y Geb
  • 5. Grails • Mantenido OCI, Apache 2 • Convención sobre configuración • Una capa encima de Spring Boot • Buen ecosistema de plugins • Gorm • Diferentes profiles
  • 6. Grails tips • Haz muchos tests. • Si vas a integrarte con otras librerías o frameworks, pruébalo antes. • Pon tu código del dominio en src/main/groovy. • Usa las clases Gorm sólo en repositorios. • Si vas a usar @Autowired, asegurarte de que funciona en producción. • Codenarc y Open Clover.
  • 7. Domain Driven Design • Foco en el dominio y en su lógica • Lenguaje Ubicuo • Bounded contexts, no tiene que ser uno por microservicio • Agregados, entidades, value objects
  • 8. DDD Tips • No empieces con una fiesta de bounded contexts. • Define bien la paquetería, separación por bounded contexts. • Ten claros cuales son los puntos de entrada a tu dominio. • Pon en común con el equipo que es una invariante, que es una validación, y donde las hacéis. • Diferenciad value objects de entidades. • http://danielwhittaker.me/2015/07/05/are-you-making- these-10-ddd-mistakes/
  • 9. Event Sourcing • Aplicación tiene estado • Se reciben y se producen eventos • El estado puede cambiar por los eventos • Los eventos se procesan uno tras otro, en secuencia • Podemos volver a un estado de nuestra aplicación, volviendo a aplicar los eventos
  • 10. ES Tips • Las sesiones de event storming ayudan a identificar los eventos de tu aplicación. • Evita hacer muchas conversiones de objetos o busca una forma fácil de realizarlas. • Prepara tu sistema para volver a cargar los eventos. • Define como otros bounded contexts pueden escuchar tus eventos.
  • 11. CQRS • Modelo de lectura y modelo de escritura • Query model & Command model • Enriquecer el modelo de lectura para las necesidades de la aplicación (Ej: las vistas) • Información está en varios sitios
  • 12. CQRS Tips • Los identificadores deben ser únicos y no modificables por el usuario. • Define cuales son las vistas, no guardes en el modelo de lectura más de lo que necesitas. • Puede que tu aplicación falle al guardar en el modelo de lectura y no te enteres.
  • 13. Axon Framework • Apache 2, Java, http://www.axonframework.org • CQRS and Event Sourcing friendly • Agregado recibe comandos • Los comandos generan eventos • Eventos en el agregado para el modelo de escritura • Eventos para modificar el modelo de lectura • Identificador único para cada agregado • Se lleva bien con spring, es fácil configurar Mongo
  • 15. @Aggregate class Contract { @AggregateIdentifier String id @CommandHandler Contract(ContractCreateCommand command) { AggregateLifecycle.apply(new ContractCreatedEvent())) } @EventSourcingHandler void onCreate(ContractCreatedEvent event) { //Hacemos cosas en el agregado } }
  • 16. @EventHandler void onEvent(ClientCreatedEvent clientCreatedEvent) { //Guardamos en el modelo de lectura }
  • 17. Comando Evento Cambiamos el modelo Evento se persiste Persistimos en el 
 modelo de lectura Consulta Obtenemos la información
 del modelo de lectura
  • 18. Nuestra aplicación • Gestión de los clientes y sus cuentas de inversión. • Tener claro qué va pasando y quién va haciendo las cosas. • Personas, clientes, contratos, cuentas, gestores, honorarios. • Aplicación grails con axon, datos en postgres, eventos en mongo, gorm, plugin spring security, google oauth, jquery. • Procesado de ficheros de bancos y mucha gestión de documentos. • Despliegue en AWS con Terraform.
  • 20. En el BackOffice • Los controladores grails son nuestros puntos de entrada • Lógica de dominio en src/main/groovy • Los dominios tienen puntos de entrada que son llamados desde los controladores • Tenemos entidades Gorm en src/main/groovy y en la librería compartida • Duplicación entre agregados y modelo de lectura, muchas conversiones
  • 22. class ContractController { def create(ContractGrailsCommand command) { if (command.hasErrors()) { //devolvemos errores a la vista } Result result = createContractAction.with(command) if (result.hasErrors()) { //devolvemos errores a la vista } else { //all ok! } }
  • 23. class CreateContractAction { ClientsApplicationService clientsApplicationService Result with(ContractGrailsCommand command) { //Lógica que no sea de dominio //Acceder a diferentes bounded contexts //Convertir los comandos? clientsApplicationService.createContract(command) } }
  • 24. class CreateContractUseCase { //Cualquier uso de Gorm sólo en los repositorios ContractsRepository contractsRepository Result<String> perform(ContractCommand command) { //Aqui toda la logice de dominio def (errors, contract) = createContractFrom command if (!errors) { //Guardar en el repositorio o repositorios Result.from contractsRepository.create(contract).id } else { Result.fromErrors errors } } }
  • 26. DDD nos da muchos beneficios. Separación de la lógica de nuestro dominio del resto. Hay que hablar mucho en el equipo cómo y dónde hacer las cosas, validaciones, servicios, adaptadores, … Evita que la arquitectura te guíe a la hora de construir el modelo
  • 27. Axon funciona bien. Pruébalo antes de empezar a usarlo. Ten claro lo que hace para aprovecharlo. Centra mucho la lógica en los agregados y los ensucia. Hay que hacer muchas conversiones. Cuidado con las ‘serializaciones’.
  • 28. Grails encaja a la hora de realizar un backoffice. Es lento y pesado. Cuesta sacar clases Gorm fuera de la aplicación. Los gsp’s son cosa del pasado. Requiere mucha memoria.
  • 29. Resumen • DDD Sí. Hay que dedicarle tiempo y reuniones. • Grails, sólo para backoffice’s. Si vas a empezar con él sobrecargándolo, mejor piensa en usar otra cosa. • Event sourcing y CQRS, ¿te hace falta?. • Ahora mismo ya no usamos axon, ni eventos ni CQRS. • No empieces una aplicación complicando la vida. • No metas muchas cosas nuevas a la vez.
  • 30. Q & A