SlideShare una empresa de Scribd logo
uy.vopen.tech
El misterioso CQRS
Command Query Responsibility Segregation
Fernando Sonego
Solution Architect
Muchachos tuve una
idea extraordinaria
que revolucionara al
mundo ¡¡¡Dividamos los
modelos de consulta
de los demás!!!
¿Eso no es
CQRS?
Si, lo presento
Greg Young el
año pasado
¿Qué es CQRS?
• Es un patrón bastante simple de entender
• La Idea es en lugar de tener un modelo unificado, necesitamos tener 2,
uno para lectura y otro para escritura.
• CQRS fue presentado Greg Young en el año 2010, el se baso en la idea
Single Responsibility Principle correspondiente a SOLID.
• Las principales características dicen que cada método debe ser un
comando o un query que solo haga una acción, pero no ambas cosas.
• El patrón ayuda a la legibilidad del código, con un golpe de vista
podemos ver su propósito por su firma.
• CQRS extiende el principio de CQS a nivel arquitectura.
¿Y porque usar CQRS?
Escalabilidad Rendimiento Simplicidad
Escalabilidad
Crear Leer Actualizar Eliminar
Crear
Leer
Actualizar Eliminar
Escalabilidad | Rendimiento | Simplicidad
Crear
Actualizar
Eliminar
Leer
Comandos
1 Servidor
Consultas
10 Servidores
Consultas SQL
altamente optimizadas
Cache
Solo cambian datos
Reducción de código
complejo
En resumen
• CQRS nace a partir de CQS.
• CQRS extiende CQS a nivel arquitectocnico.
• Separa un modelo unificado en 2 partes: una de lectura y otra de escritura.
• CQRS nos permite tomar diferentes decisiones para las lecturas y
las escrituras.
• Mejor escalabilidad.
• Mejor Performance.
• Código Simple.
• CQRS es SRP (Single Responsability Principle) aplicado a nivel de
arquitectura.
Command Query Responsibility
Segregation
Clientes
Modelo de
dominio
Consultas de
Lectura
API
Escritura
API
Lectura
DB
Relacional
DB No
Relacional
Sync
Comando Comandos
consulta Consultas
Go to the Action
Hablemos un poco mensajes
• En CQRS en realidad vamos a tener 3 tipos de mensajes
• Comandos, le dice a la aplicación que tiene que hacer algo.
• Consultas, le pregunta a la aplicación por algo.
• Eventos, información para externos.
Clientes
Aplicación
Comando
consulta
Eventos
Externos
Clean Code
• Convenciones de nombres
Comandos EventosConsultas
En imperativo
EditContactInfo
Empezar con Get
GetList
Pasado
ContactInfoChanged
NO! EditContactInfoComand GetListQuery ContactInfoChangedEvent
Problemas en la arquitectura de dominio
Clientes
Modelo de
dominio
Servicios
App
Servicios
App
API
API
• Modelo de dominio complicado
• Transporte pesado de datos
innecesarios
• Mala rendimiento para las
consultas
¿Entonces voy a tener 2 modelos de
dominio?
Clientes
Comandos
Consultas
DDD aquí
DDD no aquí
• Donde no hay modificación de datos
• No necesitamos encapsulación.
• No necesitamos abstracciones.
¿Qué otra cosa no debo hacer?
Clientes
Comandos
Consultas
No usar ORMs
No usar ORMs en lecturas
• ¡Pero tengo el lazy load activado!
• Cuando esta activosy necesitamos acceder a la base de datos se vuelve a
consultar ( bye bye perfomance).
• ¡Bueno lo desactivo!
• Tampoco no hace falta esta medida extrema.
• Conclusión
• Solo usar un grande y pesado ORM con comandos.
• Escribir a mano las consultas SQL.
Aumentemos el rendimiento y la
escalabilidad
Clientes
Comandos
Consultas
Master
Replica 1
Replica 1
Replica
Mismo problema, separamos las lecturas, pero
seguimos con los mismos modelos.
Pensemos un minuto
¿Que forma tienen la mayoría del tiempo los
datos de consulta?
DESNORMALIZADOS
¡Desnormalizada! ¿Y que hago entonces?
• Podemos crear tablas especializadas de consultas que se actualizen
por un trigger en la base de datos.
• Podemos, en el caso de SQL, usar vistas especializadas para las
consultas.
• Podemos crearuna base de datos especializada total mente para
consultas para consultas.
• Podemos usar indexadorores o bases de datos NoSQL.
Resumen sobre las bases de datos
• Bases de datos separadas para consultas
• Podemos implementar completo el patron
CQRS.
• Las lecturas y escrituras están separadas
en cada nivel: API, servicios de
aplicaciones, modelo de dominio, base de
datos.
• Ajustar las lecturas de base de datos al a
necesidad real del modelo de consulta.
• Escalabilidad se da agregando recursos
de servidor
• Ejemplos de separación en el nivel de
base de datos:
• Vistas indexadas
• Replica de base de datos
• Algunas herramientas como elastic search.
• Diseñar la base de datos para lecturas
• Desnormalizar y ajustado a las
necesidades del modelo real.
• Reducir el numero de Joins y muchísimo
pos-procesamiento.
• La tercera forma normal es para
comandos, la primera mejor para
consultar.
• Podría necesitar una base de datos de
lectura separada para cada cliente.
• Mantener la sincronización es costoso;
eventual inconsistencia es confusa:
• en muchos casos, una sola base de datos
es suficiente
Go to the Action
Info
• https://github.com/fsonego/vOpenUyCQRS
• dotnet restore
• dotnet build
• dotnet run
Tarea para hogar
• Commandos Vs DTOs.
• Sincronización de comandos y consultas:
• Proyecciones impulsadas por estados.
• Proyecciones manejadas por manejadores de
eventos.
• Consistencia.
• Consistencia Eventual.
• Versionado.
• Expedición de cache
• CQRS vs Patrón Especificación
• Handlers Vs Decoradores Vs Middleware
Conclusiones y Preguntas
SPONSORS
¡Gracias!
fernando.sonego@gmail.com
@FernandoSonego
www.withoutdebugger.com
Fernando Sonego
Solution Architect

Más contenido relacionado

Similar a vOpenvOpenUy: El misterioso CQRS

Servicios de Bases de Datos de AWS
Servicios de Bases de Datos de AWSServicios de Bases de Datos de AWS
Servicios de Bases de Datos de AWS
Amazon Web Services LATAM
 
¿Grails + DDD + Eventsourcing + CQRS?
¿Grails + DDD + Eventsourcing + CQRS?¿Grails + DDD + Eventsourcing + CQRS?
¿Grails + DDD + Eventsourcing + CQRS?
Jorge Franco Leza
 
Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2
Ricard Clau
 
Escalando con SQL Server hasta la nube, un trayecto necesario - Adrian Miranda
Escalando con SQL Server hasta la nube, un trayecto necesario - Adrian MirandaEscalando con SQL Server hasta la nube, un trayecto necesario - Adrian Miranda
Escalando con SQL Server hasta la nube, un trayecto necesario - Adrian Miranda
SpanishPASSVC
 
Bajandose de la nube y volviendose a subir
Bajandose de la nube y volviendose a subirBajandose de la nube y volviendose a subir
Bajandose de la nube y volviendose a subir
Pedro Colmenares
 
Optimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-MemoryOptimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-Memory
Gonzalo Chacaltana
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup
 
Escalando para sus primeros 10 millones de usuarios
Escalando para sus primeros 10 millones de usuariosEscalando para sus primeros 10 millones de usuarios
Escalando para sus primeros 10 millones de usuarios
Amazon Web Services LATAM
 
Presentacion cw2012
Presentacion cw2012Presentacion cw2012
Presentacion cw2012
Alberto Garrido
 
Introducción mongodb y desarrollo
Introducción mongodb y desarrolloIntroducción mongodb y desarrollo
Introducción mongodb y desarrollo
Juan Ladetto
 
Fundamentos para el diseño de una RESTful API pragmática
Fundamentos para el diseño de una RESTful API pragmáticaFundamentos para el diseño de una RESTful API pragmática
Fundamentos para el diseño de una RESTful API pragmática
LeoWong91
 
LenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptxLenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptx
carrilloja98
 
Java script para desarrolladores SharePoint
Java script para desarrolladores SharePointJava script para desarrolladores SharePoint
Java script para desarrolladores SharePoint
Adrian Diaz Cervera
 
Azure infrastructure testing con inspec
Azure infrastructure testing con inspecAzure infrastructure testing con inspec
Azure infrastructure testing con inspec
Alejandro García Miravet
 
[SPANISH ]Codealike en MUG Argentina
[SPANISH ]Codealike en MUG Argentina[SPANISH ]Codealike en MUG Argentina
[SPANISH ]Codealike en MUG Argentina
Codealike
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
Rodolfo Finochietti
 
Sistema de Bases de Datos AWS
Sistema de Bases de Datos AWSSistema de Bases de Datos AWS
Sistema de Bases de Datos AWS
Amazon Web Services LATAM
 
Clase 11
Clase 11Clase 11
Clase 11
Gabriela
 
Panel Magmaconf
Panel MagmaconfPanel Magmaconf
Panel Magmaconf
Ismael G Marín C
 
Analisis de requerimientos, Ingenieria de Software
Analisis de requerimientos, Ingenieria de SoftwareAnalisis de requerimientos, Ingenieria de Software
Analisis de requerimientos, Ingenieria de Software
Marvin Romero
 

Similar a vOpenvOpenUy: El misterioso CQRS (20)

Servicios de Bases de Datos de AWS
Servicios de Bases de Datos de AWSServicios de Bases de Datos de AWS
Servicios de Bases de Datos de AWS
 
¿Grails + DDD + Eventsourcing + CQRS?
¿Grails + DDD + Eventsourcing + CQRS?¿Grails + DDD + Eventsourcing + CQRS?
¿Grails + DDD + Eventsourcing + CQRS?
 
Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2
 
Escalando con SQL Server hasta la nube, un trayecto necesario - Adrian Miranda
Escalando con SQL Server hasta la nube, un trayecto necesario - Adrian MirandaEscalando con SQL Server hasta la nube, un trayecto necesario - Adrian Miranda
Escalando con SQL Server hasta la nube, un trayecto necesario - Adrian Miranda
 
Bajandose de la nube y volviendose a subir
Bajandose de la nube y volviendose a subirBajandose de la nube y volviendose a subir
Bajandose de la nube y volviendose a subir
 
Optimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-MemoryOptimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-Memory
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
 
Escalando para sus primeros 10 millones de usuarios
Escalando para sus primeros 10 millones de usuariosEscalando para sus primeros 10 millones de usuarios
Escalando para sus primeros 10 millones de usuarios
 
Presentacion cw2012
Presentacion cw2012Presentacion cw2012
Presentacion cw2012
 
Introducción mongodb y desarrollo
Introducción mongodb y desarrolloIntroducción mongodb y desarrollo
Introducción mongodb y desarrollo
 
Fundamentos para el diseño de una RESTful API pragmática
Fundamentos para el diseño de una RESTful API pragmáticaFundamentos para el diseño de una RESTful API pragmática
Fundamentos para el diseño de una RESTful API pragmática
 
LenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptxLenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptx
 
Java script para desarrolladores SharePoint
Java script para desarrolladores SharePointJava script para desarrolladores SharePoint
Java script para desarrolladores SharePoint
 
Azure infrastructure testing con inspec
Azure infrastructure testing con inspecAzure infrastructure testing con inspec
Azure infrastructure testing con inspec
 
[SPANISH ]Codealike en MUG Argentina
[SPANISH ]Codealike en MUG Argentina[SPANISH ]Codealike en MUG Argentina
[SPANISH ]Codealike en MUG Argentina
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Sistema de Bases de Datos AWS
Sistema de Bases de Datos AWSSistema de Bases de Datos AWS
Sistema de Bases de Datos AWS
 
Clase 11
Clase 11Clase 11
Clase 11
 
Panel Magmaconf
Panel MagmaconfPanel Magmaconf
Panel Magmaconf
 
Analisis de requerimientos, Ingenieria de Software
Analisis de requerimientos, Ingenieria de SoftwareAnalisis de requerimientos, Ingenieria de Software
Analisis de requerimientos, Ingenieria de Software
 

Más de fernando sonego

Algeiba meetup Net Baires Bot Empresariales
Algeiba meetup Net Baires Bot EmpresarialesAlgeiba meetup Net Baires Bot Empresariales
Algeiba meetup Net Baires Bot Empresariales
fernando sonego
 
AI+ Tour 2019 Argentina
AI+ Tour 2019 ArgentinaAI+ Tour 2019 Argentina
AI+ Tour 2019 Argentina
fernando sonego
 
Novedades .Net Core - NetBaires
Novedades .Net Core - NetBairesNovedades .Net Core - NetBaires
Novedades .Net Core - NetBaires
fernando sonego
 
Jornada de Arquitectura .NET - 3º Edición
Jornada de Arquitectura .NET - 3º EdiciónJornada de Arquitectura .NET - 3º Edición
Jornada de Arquitectura .NET - 3º Edición
fernando sonego
 
vOpenUy: Construye tu aplicación Multi-Tenant
vOpenUy: Construye tu aplicación Multi-TenantvOpenUy: Construye tu aplicación Multi-Tenant
vOpenUy: Construye tu aplicación Multi-Tenant
fernando sonego
 
2019.10.04.v open.azurevsaws
2019.10.04.v open.azurevsaws2019.10.04.v open.azurevsaws
2019.10.04.v open.azurevsaws
fernando sonego
 
Xamarin y azure b2c Servicio de identidad para tus apps
Xamarin y azure b2c Servicio de identidad para tus appsXamarin y azure b2c Servicio de identidad para tus apps
Xamarin y azure b2c Servicio de identidad para tus apps
fernando sonego
 
Azure bootcampo 2019 start up_v1
Azure bootcampo 2019 start up_v1Azure bootcampo 2019 start up_v1
Azure bootcampo 2019 start up_v1
fernando sonego
 
Net-Baires: CleanCode 20190622
Net-Baires: CleanCode 20190622Net-Baires: CleanCode 20190622
Net-Baires: CleanCode 20190622
fernando sonego
 
NetBaires 2018 - Azure Serach
NetBaires 2018 - Azure SerachNetBaires 2018 - Azure Serach
NetBaires 2018 - Azure Serach
fernando sonego
 
NetConfUy 2018 - Azure B2C
NetConfUy 2018 - Azure B2CNetConfUy 2018 - Azure B2C
NetConfUy 2018 - Azure B2C
fernando sonego
 
NetConfCo 2018 Azure B2C
NetConfCo 2018  Azure B2CNetConfCo 2018  Azure B2C
NetConfCo 2018 Azure B2C
fernando sonego
 
.Net core multiplataforma. sera verdad???
.Net core multiplataforma. sera verdad???.Net core multiplataforma. sera verdad???
.Net core multiplataforma. sera verdad???
fernando sonego
 
Net conf ar v2018 start up
Net conf ar v2018 start upNet conf ar v2018 start up
Net conf ar v2018 start up
fernando sonego
 
DevDayAr de Junior a Sernior ¿Cual es el camino?
DevDayAr de Junior a Sernior ¿Cual es el camino?DevDayAr de Junior a Sernior ¿Cual es el camino?
DevDayAr de Junior a Sernior ¿Cual es el camino?
fernando sonego
 
Net conf uy 2017 type script
Net conf uy 2017   type scriptNet conf uy 2017   type script
Net conf uy 2017 type script
fernando sonego
 
DevOps - TechNights
DevOps - TechNightsDevOps - TechNights
DevOps - TechNights
fernando sonego
 
Azure Microsft Cognite Service
Azure Microsft Cognite ServiceAzure Microsft Cognite Service
Azure Microsft Cognite Service
fernando sonego
 

Más de fernando sonego (18)

Algeiba meetup Net Baires Bot Empresariales
Algeiba meetup Net Baires Bot EmpresarialesAlgeiba meetup Net Baires Bot Empresariales
Algeiba meetup Net Baires Bot Empresariales
 
AI+ Tour 2019 Argentina
AI+ Tour 2019 ArgentinaAI+ Tour 2019 Argentina
AI+ Tour 2019 Argentina
 
Novedades .Net Core - NetBaires
Novedades .Net Core - NetBairesNovedades .Net Core - NetBaires
Novedades .Net Core - NetBaires
 
Jornada de Arquitectura .NET - 3º Edición
Jornada de Arquitectura .NET - 3º EdiciónJornada de Arquitectura .NET - 3º Edición
Jornada de Arquitectura .NET - 3º Edición
 
vOpenUy: Construye tu aplicación Multi-Tenant
vOpenUy: Construye tu aplicación Multi-TenantvOpenUy: Construye tu aplicación Multi-Tenant
vOpenUy: Construye tu aplicación Multi-Tenant
 
2019.10.04.v open.azurevsaws
2019.10.04.v open.azurevsaws2019.10.04.v open.azurevsaws
2019.10.04.v open.azurevsaws
 
Xamarin y azure b2c Servicio de identidad para tus apps
Xamarin y azure b2c Servicio de identidad para tus appsXamarin y azure b2c Servicio de identidad para tus apps
Xamarin y azure b2c Servicio de identidad para tus apps
 
Azure bootcampo 2019 start up_v1
Azure bootcampo 2019 start up_v1Azure bootcampo 2019 start up_v1
Azure bootcampo 2019 start up_v1
 
Net-Baires: CleanCode 20190622
Net-Baires: CleanCode 20190622Net-Baires: CleanCode 20190622
Net-Baires: CleanCode 20190622
 
NetBaires 2018 - Azure Serach
NetBaires 2018 - Azure SerachNetBaires 2018 - Azure Serach
NetBaires 2018 - Azure Serach
 
NetConfUy 2018 - Azure B2C
NetConfUy 2018 - Azure B2CNetConfUy 2018 - Azure B2C
NetConfUy 2018 - Azure B2C
 
NetConfCo 2018 Azure B2C
NetConfCo 2018  Azure B2CNetConfCo 2018  Azure B2C
NetConfCo 2018 Azure B2C
 
.Net core multiplataforma. sera verdad???
.Net core multiplataforma. sera verdad???.Net core multiplataforma. sera verdad???
.Net core multiplataforma. sera verdad???
 
Net conf ar v2018 start up
Net conf ar v2018 start upNet conf ar v2018 start up
Net conf ar v2018 start up
 
DevDayAr de Junior a Sernior ¿Cual es el camino?
DevDayAr de Junior a Sernior ¿Cual es el camino?DevDayAr de Junior a Sernior ¿Cual es el camino?
DevDayAr de Junior a Sernior ¿Cual es el camino?
 
Net conf uy 2017 type script
Net conf uy 2017   type scriptNet conf uy 2017   type script
Net conf uy 2017 type script
 
DevOps - TechNights
DevOps - TechNightsDevOps - TechNights
DevOps - TechNights
 
Azure Microsft Cognite Service
Azure Microsft Cognite ServiceAzure Microsft Cognite Service
Azure Microsft Cognite Service
 

Último

maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
JimmyTejadaSalizar
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
CesarPazosQuispe
 
Gabinete, puertos y dispositivos que se conectan al case
Gabinete,  puertos y  dispositivos que se conectan al caseGabinete,  puertos y  dispositivos que se conectan al case
Gabinete, puertos y dispositivos que se conectan al case
JuanaNT7
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
cbtechchihuahua
 
Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
sofiahuarancabellido
 
SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
tamarita881
 
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
AMADO SALVADOR
 
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdfProjecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Festibity
 
Actividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdfActividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdf
NajwaNimri1
 
IA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticulturaIA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticultura
Miguel Rebollo
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
paulroyal74
 
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
bendezuperezjimena
 
Presentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The CleanPresentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The Clean
juanchogame18
 
Informació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdfInformació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdf
Festibity
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Festibity
 
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialCatalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
AMADO SALVADOR
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
larapalaciosmonzon28
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Festibity
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVATECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
LilibethEstupian
 
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial ValenciaCatalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
AMADO SALVADOR
 

Último (20)

maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
 
Gabinete, puertos y dispositivos que se conectan al case
Gabinete,  puertos y  dispositivos que se conectan al caseGabinete,  puertos y  dispositivos que se conectan al case
Gabinete, puertos y dispositivos que se conectan al case
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
 
Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
 
SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
 
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
 
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdfProjecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
 
Actividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdfActividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdf
 
IA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticulturaIA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticultura
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
 
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
 
Presentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The CleanPresentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The Clean
 
Informació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdfInformació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdf
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
 
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialCatalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVATECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
 
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial ValenciaCatalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
 

vOpenvOpenUy: El misterioso CQRS

  • 2. El misterioso CQRS Command Query Responsibility Segregation Fernando Sonego Solution Architect
  • 3.
  • 4. Muchachos tuve una idea extraordinaria que revolucionara al mundo ¡¡¡Dividamos los modelos de consulta de los demás!!! ¿Eso no es CQRS? Si, lo presento Greg Young el año pasado
  • 5. ¿Qué es CQRS? • Es un patrón bastante simple de entender • La Idea es en lugar de tener un modelo unificado, necesitamos tener 2, uno para lectura y otro para escritura. • CQRS fue presentado Greg Young en el año 2010, el se baso en la idea Single Responsibility Principle correspondiente a SOLID. • Las principales características dicen que cada método debe ser un comando o un query que solo haga una acción, pero no ambas cosas. • El patrón ayuda a la legibilidad del código, con un golpe de vista podemos ver su propósito por su firma. • CQRS extiende el principio de CQS a nivel arquitectura.
  • 6. ¿Y porque usar CQRS? Escalabilidad Rendimiento Simplicidad
  • 7. Escalabilidad Crear Leer Actualizar Eliminar Crear Leer Actualizar Eliminar
  • 8. Escalabilidad | Rendimiento | Simplicidad Crear Actualizar Eliminar Leer Comandos 1 Servidor Consultas 10 Servidores Consultas SQL altamente optimizadas Cache Solo cambian datos Reducción de código complejo
  • 9. En resumen • CQRS nace a partir de CQS. • CQRS extiende CQS a nivel arquitectocnico. • Separa un modelo unificado en 2 partes: una de lectura y otra de escritura. • CQRS nos permite tomar diferentes decisiones para las lecturas y las escrituras. • Mejor escalabilidad. • Mejor Performance. • Código Simple. • CQRS es SRP (Single Responsability Principle) aplicado a nivel de arquitectura.
  • 10. Command Query Responsibility Segregation Clientes Modelo de dominio Consultas de Lectura API Escritura API Lectura DB Relacional DB No Relacional Sync Comando Comandos consulta Consultas
  • 11. Go to the Action
  • 12. Hablemos un poco mensajes • En CQRS en realidad vamos a tener 3 tipos de mensajes • Comandos, le dice a la aplicación que tiene que hacer algo. • Consultas, le pregunta a la aplicación por algo. • Eventos, información para externos. Clientes Aplicación Comando consulta Eventos Externos
  • 13. Clean Code • Convenciones de nombres Comandos EventosConsultas En imperativo EditContactInfo Empezar con Get GetList Pasado ContactInfoChanged NO! EditContactInfoComand GetListQuery ContactInfoChangedEvent
  • 14. Problemas en la arquitectura de dominio Clientes Modelo de dominio Servicios App Servicios App API API • Modelo de dominio complicado • Transporte pesado de datos innecesarios • Mala rendimiento para las consultas
  • 15. ¿Entonces voy a tener 2 modelos de dominio? Clientes Comandos Consultas DDD aquí DDD no aquí • Donde no hay modificación de datos • No necesitamos encapsulación. • No necesitamos abstracciones.
  • 16. ¿Qué otra cosa no debo hacer? Clientes Comandos Consultas No usar ORMs
  • 17. No usar ORMs en lecturas • ¡Pero tengo el lazy load activado! • Cuando esta activosy necesitamos acceder a la base de datos se vuelve a consultar ( bye bye perfomance). • ¡Bueno lo desactivo! • Tampoco no hace falta esta medida extrema. • Conclusión • Solo usar un grande y pesado ORM con comandos. • Escribir a mano las consultas SQL.
  • 18. Aumentemos el rendimiento y la escalabilidad Clientes Comandos Consultas Master Replica 1 Replica 1 Replica Mismo problema, separamos las lecturas, pero seguimos con los mismos modelos.
  • 19. Pensemos un minuto ¿Que forma tienen la mayoría del tiempo los datos de consulta? DESNORMALIZADOS
  • 20. ¡Desnormalizada! ¿Y que hago entonces? • Podemos crear tablas especializadas de consultas que se actualizen por un trigger en la base de datos. • Podemos, en el caso de SQL, usar vistas especializadas para las consultas. • Podemos crearuna base de datos especializada total mente para consultas para consultas. • Podemos usar indexadorores o bases de datos NoSQL.
  • 21. Resumen sobre las bases de datos • Bases de datos separadas para consultas • Podemos implementar completo el patron CQRS. • Las lecturas y escrituras están separadas en cada nivel: API, servicios de aplicaciones, modelo de dominio, base de datos. • Ajustar las lecturas de base de datos al a necesidad real del modelo de consulta. • Escalabilidad se da agregando recursos de servidor • Ejemplos de separación en el nivel de base de datos: • Vistas indexadas • Replica de base de datos • Algunas herramientas como elastic search. • Diseñar la base de datos para lecturas • Desnormalizar y ajustado a las necesidades del modelo real. • Reducir el numero de Joins y muchísimo pos-procesamiento. • La tercera forma normal es para comandos, la primera mejor para consultar. • Podría necesitar una base de datos de lectura separada para cada cliente. • Mantener la sincronización es costoso; eventual inconsistencia es confusa: • en muchos casos, una sola base de datos es suficiente
  • 22. Go to the Action
  • 23. Info • https://github.com/fsonego/vOpenUyCQRS • dotnet restore • dotnet build • dotnet run
  • 24. Tarea para hogar • Commandos Vs DTOs. • Sincronización de comandos y consultas: • Proyecciones impulsadas por estados. • Proyecciones manejadas por manejadores de eventos. • Consistencia. • Consistencia Eventual. • Versionado. • Expedición de cache • CQRS vs Patrón Especificación • Handlers Vs Decoradores Vs Middleware

Notas del editor

  1. La foto se puede omitir, Si se quiere sumar pueden ir a “Replace Image” y si usan una foto cuadrada - redes sociales - no van a tener problema
  2. La foto se puede omitir, Si se quiere sumar pueden ir a “Replace Image” y si usan una foto cuadrada - redes sociales - no van a tener problema
  3. La foto se puede omitir, Si se quiere sumar pueden ir a “Replace Image” y si usan una foto cuadrada - redes sociales - no van a tener problema