Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Transforma tu Monolito con HMVC

168 views

Published on

En esta presentacion exploraremos el problema mas grande de nuestra industria: Las Aplicaciones Legacy. Estas no discriminan el lenguaje o plataforma de uso. Exploraremos el problema y nos devolveremos a la escuela de arquitectura para ver como podemos transformar estos monolitos a plataformas de grande escala ocupando HMVC (MVC Jerarquico) y Microservicios. No tengas miedo que juntos batallaremos estos dinosaurios!

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Transforma tu Monolito con HMVC

  1. 1. Hierarchical MVC Transforma tu Monolito!
  2. 2. QUIÉN SOY! • Luis Majano • Ingeniero Eléctrico + Informatico • El Salvador =>Texas • Sandals => ESRI => Ortus • CEO de Ortus Solutions @lmajano @ortussolutions www.ortussolutions.com
  3. 3. Spanglish Ahead
  4. 4. Areas de Enfoque Soporte Y Entrenamiento Consultoria Tutoria Aumento de Personal Open Source Desde 2006
  5. 5. OPEN SOURCE hMVC CLI-PM-Server Cloud Directory Modular CMS DI + AOP Logging Caching API BDD/TDD
  6. 6. El Problema “Legacy” Aplicaciones Monolíticas Escuela de Arquitectura HMVC Microservicios ColdBox HMVC Demo
  7. 7. EL PROBLEMA “LEGACY”
  8. 8. LEGACY PROBLEM • Da mal nombre a cualquier lenguaje • Ruby, PHP, CFML, Java, etc. • Lenguajes con mas de 10 años • Problemas de Seguridad • Problemas de Rendimiento • Problemas de Empleados • Problemas de Desarrollo • Problemas de Motivación Problemas deTodoTipo!
  9. 9. LEGACY PROBLEM •Encuesta 500+ 2019 •>55% No MVC •>50% No DI •>50% No Testing Refrescar el Navegador No Cuenta! https://teratech.com/state-of-the-CF-Union-2019-Results
  10. 10. LES GUSTA MY APP? • MVC Framework or infierno de spaghetti? • Orientation de Objectos o infierno de paginas? • Pruebas Automaticas? Integración Continua? • Agile/Scrum? • Control de Fuente? (Zip files no cuentan!) • Despliegue Continuo? • Contendores? Microservicios?
  11. 11. Aplicaciones Legacy
  12. 12. Comentarios Graciosos! <!—- Do not remove the following lines or things break —> <!— Dont’ know what this variable does, but don’t touch it —-> <!—- Remove at your own risk —-> <!—- I have no idea where this variable is set —>
  13. 13. “El Software Siempre esta Obligado a cambiar”
  14. 14. AVERGONZADO? • Legacy no tiene que avergonzar • Fue la fundación • Es una deuda tecnica • Es un problema que existirá SIEMPRE • Software es organico, respira, expande, contrae • Hay que Mejorar Continuamente o Moriras!
  15. 15. Motivación! MODERNIZE 
 OR 
 DIE!™
  16. 16. ESCUELA DE ARQUITECTURA
  17. 17. 1. COHESION - COUPLING Cohesión Acoplamiento
  18. 18. 2. MVC • Patron de Arquitectura mas común • Enfoque en Separación de lógica • Modelos, Vistas, Controladores • Ayuda a cumplir con O.O. • Miembros de equipo especializados • Metodologías comprobadas • Mantenimiento lógico • Increíbles Beneficios • Pero todas las aplicaciones crecen….
  19. 19. 2. MVC • Las capas engordan! • Dependencias crecen • Requisitos crecen y cambian • Cuidado con ocupar herencias • Y si no te cuidas…
  20. 20. 3. N-TIER - CHALUPA MEJICANA • Muy rico!! Pero Indigestion segura • Empiezas a seguir agregando capas y mas capas…. • Acoplamiento al máximo • TienesTests?Tienes Automatización? Ocupas DI? Herencia? • El Monolitico MVC
  21. 21. QUE HACEMOS?
  22. 22. 4. HMVC = MVC JERÁRQUICO
  23. 23. 4. HMVC • Evolución de MVC • MVCTriads Independientes • Beneficios • Alta Cohesion • Bajo en Acoplamiento (y grasas) • Modularización • Mejor • Organización • Reuso • Extensibilidad • Testabilidad (Es una palabra!!)
  24. 24. 4. HMVC FRAMEWORKS • ColdFusion (CFML) • ColdBox MVC • www.coldbox.org • PHP • CodeIgniter • www.codeigniter.com • FuelPHP • www.fuelphp.com • Phpixie • www.phpixie.com • Any others? lmajano@ortussolutions.com
  25. 25. 5. MICROSERVICES (MICROSERVICIOS) AN APPROACH TO DEVELOPING A SINGLE APPLICATION AS A SUITE OF SMALL SERVICES, EACH RUNNING IN ITS OWN PROCESS AND COMMUNICATING WITH LIGHTWEIGHT MECHANISMS. Martin Fowler
  26. 26. 5. MICROSERVICES M C V M C V M C V
  27. 27. • Mejor Enfoque • Menos intimidación a hacer cambios • Tolerancia de Fallas • Mantenimiento Reduce • Mejora Continua • Ciclos de “Release” Cortos! • Independencia de Requisitos • Monolito Evoluciona 5. MICROSERVICES
  28. 28. FORMULA DE MICROSERVICIOS Identifica Remueva Escala
  29. 29. HMVC Microservicios + FORMULA DE MODERNIZACIÓN
  30. 30. NORMAS DE COMBATE • Instala tu app HMVC moderno junto a tu app legacy (Folder) • Modifica tus puntos de entrada para routing de URL: 
 legacy y moderno • Identifica requisitos a modernizar: • Construye como triads HMVC ó • Refactorización a micro servicios • Nuevos requisitos van al HMVC como triads • Nuevos requisitos tienen pruebas BDD • JUST DO IT! Identifica Remueva Escala
  31. 31. CAMBIO DE PARADIGMA MODERNIZAR…
  32. 32. No hay Hacks No hay Atajos Trabajo Disciplina
  33. 33. • Incremento en conversiones • Decremento de carga de paginas • Agilidad • Menos Mantenimiento • Mucho mas visibilidad total • Emoción de los equipos • Moral Renovada • Mas enfoque en inovar y no solventar BENEFICIOS Lanzamientos los viernes? 
 Claro que si!
  34. 34. Una implementación… ColdFusion (CFML)
  35. 35. COLDFUSION (CFML)
  36. 36. COLDFUSION (CFML) • Lenguaje Maduro (22+ años) • Lenguaje Dinámico encima del JVM (JSR-223) • Dos Sabores • Adobe ColdFusion • Paid • Lucee CFML (lucee.org) • Gratis & Open Source • Compilación directa a Java Byte-Code • Moderno, Funcional y Orientado a Objetos • Script oTags • Eco systema maduro • Cuando fue la ultima vez que lo viste?
  37. 37. COLDBOX MODULES = SUPER PODERES • MVC desde 2006, HMVC desde 2011 • MVC triads => Modules • Direccionables • Compuestos (Inception) • Dependencias • En Ejecución: • Instalados • Recargados • Eliminados • ForgeBox 400+ • www.forgebox.io
  38. 38. COLDBOX MODULES • MVC por Convenciones • Manejo de Objetos • Manejo de URL Routers • Manejo de Eventos • Variables de Entorno • Detección de Entorno • Dependencias • Muchisimo mas! App
 Router Module
 Router Module
 Router Module
 Router Module
 Router Module
 Router Module
 Router Module
 Router Module
 Router Module
 Router
  39. 39. ColdBox MVC handlers layouts models modules views box.json modules_app Dependencias Tus Modulos Descriptor
  40. 40. Anatomia de Modulo ModuleConfig.cfc handlers layouts models modules modules_app Nombre Del Modulo box.json views Incepción
  41. 41. { "name":"cbSwagger-shell", "version":"1.1.0", "slug":"cbSwagger-shell", "private":false, "dependencies":{ “coldbox":"^5.0.0", “workbench":"git+https://github.com/ortus/unified-workbench.git", "cbjavaloader":">1.0.0", "swagger-sdk":">0.0.9" }, "devDependencies":{ "testbox":"^2.8.0" }, "installPaths":{ "coldbox":"coldbox/", "testbox":"testbox/", "cbjavaloader":"modules/cbjavaloader/", "swagger-sdk":"modules/swagger-sdk/", "workbench":"workbench" }, "testbox":{ "runner":"http://localhost:49616" }, "scripts":{ "postVersion":"recipe workbench/bump.boxr" } } box.json
  42. 42. MODULECONFIG.CFC • Unico requisito para un modulo • Objeto Descriptor • 1 función de configuración: configure() • Debe de existir en la raíz de tu modulo • Tiene propiedades • Funciones de devolución • Detecta tu entorno • Es un “event listener”
  43. 43. PROPIEDADES component{ this.activate = true; this.disabled = false; this.title = "My Test Module"; this.author = "Luis Majano"; this.webURL = "http://www.coldbox.org"; this.description = "A funky test module"; this.version = "1.0.0"; this.viewParentLookup = true; this.layoutParentLookup = true; this.entryPoint = "/testing"; this.inheritEntryPoint = true; this.autoMapModels = true; this.modelNamespace = "cbstore"; this.cfmapping = "cbstore"; this.aliases = [ "store", "ecommerce", "shop" ]; this.dependencies = [ "JavaLoader", "CFCouchbase" ]; }
  44. 44. FUNCIONES DE DEVOLUCIÓN
  45. 45. MODULECONFIG.CFCCONFIGURE function configure(){         settings = {             caching = false,             mailTo = "lmajano@ortussolutions.com"         };         layoutSettings = { defaultLayout = "relax.cfm" };         i18n = {             resourceBundles = {                 "cbcore" = "#moduleMapping#/i18n/cbcore"             },             defaultLocale = "en_US",             localeStorage = "cookie"         };         interceptorSettings = {             // ContentBox Custom Events             customInterceptionPoints = [                 // Code Rendering                 "cb_onContentRendering", "cb_onContentStoreRendering"             ]         }; router. route( “/“ ).to( “Main.index” ) route( “/:handler/:action” ).end();     }
  46. 46. Ejemplo: box install cors
  47. 47. MANEJO DE OBJETOS • Cada module tiene un namespace de modelos • Se ocupa para injections y devoluciones de modelos: • {modelName}@{moduleName} • property name=“builder” inject=“builder@qb” • getInstance( “builder@qb” )
  48. 48. EJECUCIONES INTERNAS #runEvent( ‘module:users.dashboard' )# #runRoute( “photos.data“ )#
  49. 49. DemoTime! modules v1 v2 vx modules_app API handlers models
  50. 50. Requirements modules v1 v2 vx modules_app API handlers models • API de Contactos • /contactos - Todos los contactos • /contactos/:id - Un contacto • Versiones • Sin base de datos • Con documentación (openApi) • Con pruebas BDD • Micro servicio! <10 minutes
  51. 51. QUESTIONS? Go Modularize! www.ortussolutions.com @ortussolutions

×