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!
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. 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. 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?
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 —>
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!
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. 2. MVC
• Las capas engordan!
• Dependencias crecen
• Requisitos crecen y cambian
• Cuidado con ocupar herencias
• Y si no te cuidas…
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
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
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
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
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!
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. 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. 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
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”
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” )
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