SlideShare a Scribd company logo
1 of 37
Download to read offline
COMPARTIR DOMINIOS Y SERVICIOS ENTRE PROYECTOSCOMPARTIR DOMINIOS Y SERVICIOS ENTRE PROYECTOS
GRAILS PARECÍA UNA BUENA IDEAGRAILS PARECÍA UNA BUENA IDEA
03/12/2019
JESÚS JIMÉNEZ BALLANOJESÚS JIMÉNEZ BALLANO
Desarrollador desde mucho.
Fundé Kiakora Software después de varios
años de autónomo.
Mi primera vez con Groovy y Grails fue allá
por 2010.
Ahora ayudando a a reinventar las
tarjetas de crédito.
Tymit
@jjballano jesus@kiakora.com
TYMIT IS HIRING!TYMIT IS HIRING!
Backend
Android/Kotlin
iOS/Swift
https://tymit.workable.com
¡ESTOY (CASI) DISPONIBLE PARA OTRO PROYECTO!¡ESTOY (CASI) DISPONIBLE PARA OTRO PROYECTO!
jesus@kiakora.com
HACE DOS AÑOS...HACE DOS AÑOS...
Nuevo proyecto que consistía en:
API usada por las aplicaciones móviles.
Panel de administración web para la gestión interna.
“Juntemos todos los servicios y dominios
en un plugin y así reutilizamos el código
en ambas aplicaciones.”
DOS AÑOS MÁS TARDE...DOS AÑOS MÁS TARDE...
“Voy a presentar una charla en el Madrid
GUG sobre esa (¿mala?) decisión tomada
hace 2 años.”
ESTRUCTURA INICIAL DEL PROYECTOESTRUCTURA INICIAL DEL PROYECTO
Un plugin Grails para alojar servicios y dominios.
Proyecto REST para hacer la función de API.
Proyecto web para el panel de administración.
Otros proyectos pequeños.
PROBLEMASPROBLEMAS
DISCLAIMERDISCLAIMER
Algunos de los problemas vienen por compartir base de
datos y no simplemente por compartir dominios y
servicios.
Otros problemas vienen por tener más de un nodo
levantado de los proyectos.
¿DÓNDE LO COLOCO?¿DÓNDE LO COLOCO?
Hay clases que van a ser usadas solo por uno de los
proyectos.
Plugin: Añadimos un montón de código que no se va
a usar en los proyectos principales.
Proyecto: Tenemos servicios y dominios
desperdigados.
EJEMPLO: DOMINIOS USUARIOEJEMPLO: DOMINIOS USUARIO
Cada aplicación tiene su dominio Usuario para el login.
Los servicios utilizarán ambos objetos.
DEPENDENCIAS NO USADASDEPENDENCIAS NO USADAS
Cualquier dependencia del plugin irá en todos los
proyectos, la usen o no.
WAR/JAR más grandes.
Mayor uso de memoria.
Mayor tiempo de arranque.
GORM MULTI-TENANTGORM MULTI-TENANT
Se di culta bastante el trabajo con multi-tenant si a
uno de los proyectos le viene bien implementarlo y al
otro no.
VARIABLES DE ENTORNOVARIABLES DE ENTORNO
Tener dependencias y servicios comunes nos obliga a
añadirle a un proyecto variables de entorno que igual
no necesita.
ACTUALIZACIONES DE VERSIONES DE GRAILSACTUALIZACIONES DE VERSIONES DE GRAILS
A veces tienes que actualizar todos o ninguno por
incompatibilidades entre versiones.
CACHÉSCACHÉS
Se di culta mucho el trabajar con cachés.
Hibernate (desactivar caché de segundo nivel)
@Cacheable
DATABASE (MIGRATION PLUGIN)DATABASE (MIGRATION PLUGIN)
Mismos dominios lleva normalmente a atacar a la
misma base de datos.
Si tienes más de 1 nodo por proyecto, mismo problema.
VERSIONADO DE LAS TABLASVERSIONADO DE LAS TABLAS
grails.gorm.default.mapping = {1
version false2
}3
BLOQUEOS EN TIEMPO DE ARRANQUEBLOQUEOS EN TIEMPO DE ARRANQUE
Mayor tiempo de arranque por el bloqueo que se hace
de la base de datos.
CAMBIOS EN EL ESQUEMACAMBIOS EN EL ESQUEMA
Se pueden producir errores si algún proyecto:
Elimina un campo de la base de datos.
Añade un campo no nullable.
Renombra una tabla o un campo.
Hasta que el otro proyecto despliegue con la nueva
versión del plugin.
DESPLIEGUE DE LOS PROYECTOSDESPLIEGUE DE LOS PROYECTOS
Si hay un cambio importante en el esquema, hay que
desplegar todos los proyectos que lo usen.
El más importante tendrá que desplegar primero.
¿DÓNDE PONGO LOS SCRIPTS DE ACTUALIZACIÓN?¿DÓNDE PONGO LOS SCRIPTS DE ACTUALIZACIÓN?
Plugin
Cualquier proyecto que levante cambia el esquema y puede
romper a los otros.
Proyectos
El otro proyecto puede fallar.
Los tests funcionales/integración en el proyecto que no tiene
los scripts se complican.
Difícil hacer tests de integración ables dentro del plugin.
Los cambios que el otro proyecto necesita, se tienen que poner
en el que tiene los scripts.
BLOQUEOS DE TABLASBLOQUEOS DE TABLAS
Cuidado con vistas materializadas actualizándose.
Los bloqueos de tablas o las pueden afectar a otras
partes críticas.
(POSIBLES) SOLUCIONES(POSIBLES) SOLUCIONES
Algunas compatibles entre sí, otras soluciones
alternativas.
DISCLAIMERDISCLAIMER
No todas las soluciones las he probado.
PARTIR EL PLUGIN EN VARIOS PLUGINSPARTIR EL PLUGIN EN VARIOS PLUGINS
Con trozos más pequeños cada proyecto puede
incorporar solo lo que necesite.
EL PLUGIN SOLO CON LO QUE REALMENTE ES COMÚNEL PLUGIN SOLO CON LO QUE REALMENTE ES COMÚN
Cada aplicación consume los datos a su manera.
Poco código es realmente compartido.
Se tienen servicios y dominios en el plugin y en cada
uno de los proyectos.
NO COMPARTIR BASE DE DATOSNO COMPARTIR BASE DE DATOS
Si no se comparten bases de datos, evitaremos muchos
de los problemas.
A cambio añadimos el problema de la sincronización y
duplicidad de los datos.
NO USAR LAS MISMAS TABLASNO USAR LAS MISMAS TABLAS
Crea vistas [materializadas] para generar los dominios
especí cos para cada proyecto.
Solo un proyecto escribe en una tabla determinada, el
otro la consulta a partir de vistas.
COMPARTIR LO MÍNIMO POSIBLE DE CADA TABLACOMPARTIR LO MÍNIMO POSIBLE DE CADA TABLA
Dominios con solo lo imprescindible.
Mínima cantidad de campos no nullables (en base de
datos).
No renombrar tablas o campos de la base de datos, solo
el dominio.
EXTERNALIZA LA GESTIÓN DE LA BASE DE DATOS A OTROEXTERNALIZA LA GESTIÓN DE LA BASE DE DATOS A OTRO
PROCESOPROCESO
Ningún proyecto gestiona la base de datos, sino
que es un agente externo.
Se puede plani car mejor el cambio en los
esquemas para no romper.
CACHÉS DISTRIBUIDASCACHÉS DISTRIBUIDAS
Una caché distribuída puede solucionar alguno de los
problemas con las cachés.
MICROSERVICIOSMICROSERVICIOS
Cada microservicio gestiona sus cachés, bases de
datos, etc.
Úsese con moderación y siempre bajo la supervisión de
un adulto.
EVENT SOURCING / CQRSEVENT SOURCING / CQRS
¡Y se acabó el compartir nada!
A cambio de mayor complejidad en el código.
Úsese con moderación y siempre bajo la supervisión de
al menos 2 adultos.
CONCLUSIONESCONCLUSIONES
Si de un proyecto hay más de una instancia
levantada, hay los mismos problemas.
Los mayores problemas son debidos a compartir
base de datos entre diferentes proyectos o nodos.
Compartir solo lo realmente común.
Trade-offs everywhere.
¿PREGUNTAS O COMENTARIOS?¿PREGUNTAS O COMENTARIOS?

More Related Content

Similar to Compartir dominios y servicios entre proyectos: problemas y soluciones

Herramientas de desarrollo de android
Herramientas de desarrollo de androidHerramientas de desarrollo de android
Herramientas de desarrollo de androidJaqueline Luna
 
Sistema gestor de base de datos jaime valdez
Sistema gestor de base de datos jaime valdezSistema gestor de base de datos jaime valdez
Sistema gestor de base de datos jaime valdezjaime0910
 
herramientas tecnológicas
herramientas tecnológicasherramientas tecnológicas
herramientas tecnológicasGerardo Linares
 
Template paper-2015
Template paper-2015Template paper-2015
Template paper-2015facinger2
 
MEJORES PROGRAMAS PARA DISEÑAR PAGINA WEB
MEJORES PROGRAMAS PARA DISEÑAR PAGINA WEBMEJORES PROGRAMAS PARA DISEÑAR PAGINA WEB
MEJORES PROGRAMAS PARA DISEÑAR PAGINA WEBdaliacarolinaastocah
 
COMPLEMENTOS DEL NAVEGADOR
COMPLEMENTOS DEL NAVEGADORCOMPLEMENTOS DEL NAVEGADOR
COMPLEMENTOS DEL NAVEGADORJOSELINE
 
Plug&play:deploying big data_solutions
Plug&play:deploying big data_solutionsPlug&play:deploying big data_solutions
Plug&play:deploying big data_solutionsDavid Piris
 
Wed 2.0 y computacion en la nube.
Wed 2.0 y computacion en la nube.Wed 2.0 y computacion en la nube.
Wed 2.0 y computacion en la nube.jnco11
 
Unidad ii desarrollo de aplicaciones web
Unidad ii desarrollo de aplicaciones webUnidad ii desarrollo de aplicaciones web
Unidad ii desarrollo de aplicaciones webZacarias Marquez Cruz
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando dockerChristian Rodriguez
 
Azure Functions Spanish
Azure Functions SpanishAzure Functions Spanish
Azure Functions SpanishCDS
 

Similar to Compartir dominios y servicios entre proyectos: problemas y soluciones (20)

Herramientas de desarrollo de android
Herramientas de desarrollo de androidHerramientas de desarrollo de android
Herramientas de desarrollo de android
 
Sistema gestor de base de datos jaime valdez
Sistema gestor de base de datos jaime valdezSistema gestor de base de datos jaime valdez
Sistema gestor de base de datos jaime valdez
 
herramientas tecnológicas
herramientas tecnológicasherramientas tecnológicas
herramientas tecnológicas
 
Template paper-2015
Template paper-2015Template paper-2015
Template paper-2015
 
Implementando una Arquitectura de Microservicios
Implementando una Arquitectura de MicroserviciosImplementando una Arquitectura de Microservicios
Implementando una Arquitectura de Microservicios
 
Drupal 8, de cero a producción en minutos.
Drupal 8, de cero a producción en minutos.Drupal 8, de cero a producción en minutos.
Drupal 8, de cero a producción en minutos.
 
MEJORES PROGRAMAS PARA DISEÑAR PAGINA WEB
MEJORES PROGRAMAS PARA DISEÑAR PAGINA WEBMEJORES PROGRAMAS PARA DISEÑAR PAGINA WEB
MEJORES PROGRAMAS PARA DISEÑAR PAGINA WEB
 
COMPLEMENTOS DEL NAVEGADOR
COMPLEMENTOS DEL NAVEGADORCOMPLEMENTOS DEL NAVEGADOR
COMPLEMENTOS DEL NAVEGADOR
 
Plug&play:deploying big data_solutions
Plug&play:deploying big data_solutionsPlug&play:deploying big data_solutions
Plug&play:deploying big data_solutions
 
Lenguaje java
Lenguaje javaLenguaje java
Lenguaje java
 
Android studio
Android studioAndroid studio
Android studio
 
Wed 2.0 y computacion en la nube.
Wed 2.0 y computacion en la nube.Wed 2.0 y computacion en la nube.
Wed 2.0 y computacion en la nube.
 
Unidad ii desarrollo de aplicaciones web
Unidad ii desarrollo de aplicaciones webUnidad ii desarrollo de aplicaciones web
Unidad ii desarrollo de aplicaciones web
 
Herramientas informatricas
Herramientas informatricasHerramientas informatricas
Herramientas informatricas
 
gitflow
gitflowgitflow
gitflow
 
ATICA DevOps
ATICA DevOpsATICA DevOps
ATICA DevOps
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando docker
 
Netbeans ide 7.2
Netbeans ide 7.2Netbeans ide 7.2
Netbeans ide 7.2
 
Azure Functions
Azure FunctionsAzure Functions
Azure Functions
 
Azure Functions Spanish
Azure Functions SpanishAzure Functions Spanish
Azure Functions Spanish
 

Recently uploaded

PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOSelenaCoronadoHuaman
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...ITeC Instituto Tecnología Construcción
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfmasogeis
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3AlexysCaytanoMelndez1
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionarmando_cardenas
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Opentix
 

Recently uploaded (7)

PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdf
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacion
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 

Compartir dominios y servicios entre proyectos: problemas y soluciones

  • 1. COMPARTIR DOMINIOS Y SERVICIOS ENTRE PROYECTOSCOMPARTIR DOMINIOS Y SERVICIOS ENTRE PROYECTOS GRAILS PARECÍA UNA BUENA IDEAGRAILS PARECÍA UNA BUENA IDEA 03/12/2019
  • 2. JESÚS JIMÉNEZ BALLANOJESÚS JIMÉNEZ BALLANO Desarrollador desde mucho. Fundé Kiakora Software después de varios años de autónomo. Mi primera vez con Groovy y Grails fue allá por 2010. Ahora ayudando a a reinventar las tarjetas de crédito. Tymit @jjballano jesus@kiakora.com
  • 3. TYMIT IS HIRING!TYMIT IS HIRING! Backend Android/Kotlin iOS/Swift https://tymit.workable.com
  • 4. ¡ESTOY (CASI) DISPONIBLE PARA OTRO PROYECTO!¡ESTOY (CASI) DISPONIBLE PARA OTRO PROYECTO! jesus@kiakora.com
  • 5. HACE DOS AÑOS...HACE DOS AÑOS... Nuevo proyecto que consistía en: API usada por las aplicaciones móviles. Panel de administración web para la gestión interna. “Juntemos todos los servicios y dominios en un plugin y así reutilizamos el código en ambas aplicaciones.”
  • 6. DOS AÑOS MÁS TARDE...DOS AÑOS MÁS TARDE... “Voy a presentar una charla en el Madrid GUG sobre esa (¿mala?) decisión tomada hace 2 años.”
  • 7. ESTRUCTURA INICIAL DEL PROYECTOESTRUCTURA INICIAL DEL PROYECTO Un plugin Grails para alojar servicios y dominios. Proyecto REST para hacer la función de API. Proyecto web para el panel de administración. Otros proyectos pequeños.
  • 9. DISCLAIMERDISCLAIMER Algunos de los problemas vienen por compartir base de datos y no simplemente por compartir dominios y servicios. Otros problemas vienen por tener más de un nodo levantado de los proyectos.
  • 10. ¿DÓNDE LO COLOCO?¿DÓNDE LO COLOCO? Hay clases que van a ser usadas solo por uno de los proyectos. Plugin: Añadimos un montón de código que no se va a usar en los proyectos principales. Proyecto: Tenemos servicios y dominios desperdigados.
  • 11. EJEMPLO: DOMINIOS USUARIOEJEMPLO: DOMINIOS USUARIO Cada aplicación tiene su dominio Usuario para el login. Los servicios utilizarán ambos objetos.
  • 12. DEPENDENCIAS NO USADASDEPENDENCIAS NO USADAS Cualquier dependencia del plugin irá en todos los proyectos, la usen o no. WAR/JAR más grandes. Mayor uso de memoria. Mayor tiempo de arranque.
  • 13. GORM MULTI-TENANTGORM MULTI-TENANT Se di culta bastante el trabajo con multi-tenant si a uno de los proyectos le viene bien implementarlo y al otro no.
  • 14. VARIABLES DE ENTORNOVARIABLES DE ENTORNO Tener dependencias y servicios comunes nos obliga a añadirle a un proyecto variables de entorno que igual no necesita.
  • 15. ACTUALIZACIONES DE VERSIONES DE GRAILSACTUALIZACIONES DE VERSIONES DE GRAILS A veces tienes que actualizar todos o ninguno por incompatibilidades entre versiones.
  • 16. CACHÉSCACHÉS Se di culta mucho el trabajar con cachés. Hibernate (desactivar caché de segundo nivel) @Cacheable
  • 18. Mismos dominios lleva normalmente a atacar a la misma base de datos. Si tienes más de 1 nodo por proyecto, mismo problema.
  • 19. VERSIONADO DE LAS TABLASVERSIONADO DE LAS TABLAS grails.gorm.default.mapping = {1 version false2 }3
  • 20. BLOQUEOS EN TIEMPO DE ARRANQUEBLOQUEOS EN TIEMPO DE ARRANQUE Mayor tiempo de arranque por el bloqueo que se hace de la base de datos.
  • 21. CAMBIOS EN EL ESQUEMACAMBIOS EN EL ESQUEMA Se pueden producir errores si algún proyecto: Elimina un campo de la base de datos. Añade un campo no nullable. Renombra una tabla o un campo. Hasta que el otro proyecto despliegue con la nueva versión del plugin.
  • 22. DESPLIEGUE DE LOS PROYECTOSDESPLIEGUE DE LOS PROYECTOS Si hay un cambio importante en el esquema, hay que desplegar todos los proyectos que lo usen. El más importante tendrá que desplegar primero.
  • 23. ¿DÓNDE PONGO LOS SCRIPTS DE ACTUALIZACIÓN?¿DÓNDE PONGO LOS SCRIPTS DE ACTUALIZACIÓN? Plugin Cualquier proyecto que levante cambia el esquema y puede romper a los otros. Proyectos El otro proyecto puede fallar. Los tests funcionales/integración en el proyecto que no tiene los scripts se complican. Difícil hacer tests de integración ables dentro del plugin. Los cambios que el otro proyecto necesita, se tienen que poner en el que tiene los scripts.
  • 24. BLOQUEOS DE TABLASBLOQUEOS DE TABLAS Cuidado con vistas materializadas actualizándose. Los bloqueos de tablas o las pueden afectar a otras partes críticas.
  • 25. (POSIBLES) SOLUCIONES(POSIBLES) SOLUCIONES Algunas compatibles entre sí, otras soluciones alternativas.
  • 26. DISCLAIMERDISCLAIMER No todas las soluciones las he probado.
  • 27. PARTIR EL PLUGIN EN VARIOS PLUGINSPARTIR EL PLUGIN EN VARIOS PLUGINS Con trozos más pequeños cada proyecto puede incorporar solo lo que necesite.
  • 28. EL PLUGIN SOLO CON LO QUE REALMENTE ES COMÚNEL PLUGIN SOLO CON LO QUE REALMENTE ES COMÚN Cada aplicación consume los datos a su manera. Poco código es realmente compartido. Se tienen servicios y dominios en el plugin y en cada uno de los proyectos.
  • 29. NO COMPARTIR BASE DE DATOSNO COMPARTIR BASE DE DATOS Si no se comparten bases de datos, evitaremos muchos de los problemas. A cambio añadimos el problema de la sincronización y duplicidad de los datos.
  • 30. NO USAR LAS MISMAS TABLASNO USAR LAS MISMAS TABLAS Crea vistas [materializadas] para generar los dominios especí cos para cada proyecto. Solo un proyecto escribe en una tabla determinada, el otro la consulta a partir de vistas.
  • 31. COMPARTIR LO MÍNIMO POSIBLE DE CADA TABLACOMPARTIR LO MÍNIMO POSIBLE DE CADA TABLA Dominios con solo lo imprescindible. Mínima cantidad de campos no nullables (en base de datos). No renombrar tablas o campos de la base de datos, solo el dominio.
  • 32. EXTERNALIZA LA GESTIÓN DE LA BASE DE DATOS A OTROEXTERNALIZA LA GESTIÓN DE LA BASE DE DATOS A OTRO PROCESOPROCESO Ningún proyecto gestiona la base de datos, sino que es un agente externo. Se puede plani car mejor el cambio en los esquemas para no romper.
  • 33. CACHÉS DISTRIBUIDASCACHÉS DISTRIBUIDAS Una caché distribuída puede solucionar alguno de los problemas con las cachés.
  • 34. MICROSERVICIOSMICROSERVICIOS Cada microservicio gestiona sus cachés, bases de datos, etc. Úsese con moderación y siempre bajo la supervisión de un adulto.
  • 35. EVENT SOURCING / CQRSEVENT SOURCING / CQRS ¡Y se acabó el compartir nada! A cambio de mayor complejidad en el código. Úsese con moderación y siempre bajo la supervisión de al menos 2 adultos.
  • 36. CONCLUSIONESCONCLUSIONES Si de un proyecto hay más de una instancia levantada, hay los mismos problemas. Los mayores problemas son debidos a compartir base de datos entre diferentes proyectos o nodos. Compartir solo lo realmente común. Trade-offs everywhere.