Modularización de KBLecciones aprendidas
Enrique Almeida@ealmeida
CONCEPTO
Para que?
Dividir yconquistar
Módulo
Objetos Públicos
ObjetosPrivados
Módulo3
Módulo 2
Que es módulo en GeneXus?
Criterios de modularización
Todos los objetos en un módulo Un modulo por objeto
UN arco intra-módulo DOS arcos intra-módulo
Buena técnica de modularización es maximizar los arcos dentro de los módulos y minimizar los arcos entre los diferentes módulos.
1
2
3
4
6
5
7
1
2
3
4
6
5
7
Características deseables
COHESIÓN ALTA
BAJO ACOPLAMIENTO
NO CICLOS
MÓDULOS DE CARDINALIDAD PARECIDA
POCOS OBJETOS PUBLICOS
Metodología de Modularización de una KB. Mientras hay tablas en módulo ROOT MODULE
1. Creo módulo nuevo y pongo Visibility = Private2. Elijo tablas del nuevo módulo3. Muevo las transacciones que generan las tablas elegidas4. Divido objetos que usa tablas en módulos diferentes 5. Muevo al módulo los objetos que usan las tablas elegidas6. Marco como públicos los llamados desde otro módulo7. Rebuild all y corregir errores
Las tablas sólo pueden ser actualizadas en su módulo, aunque sea pública.
No todas las referencias son iguales
Solo se ve afectado si si cambia la estructura de la transacción
Se ve afectado si cambia la estructura + parámetros
Estructura + parámetros + Theme + webform parámetros
Estructura + parámetros + rules + eventos + variables
Referencias a tablas
Integridad Referencial
For each de lectura
New / Delete / Update
Dependencia más débil
Dependencia más fuerte
Automatizar la Modularización?
Dividir una KB en módulos es NP-Completo
Lecciones aprendidas - Modularización
Problema muy difícil
No escala
Faltan herramientas mas avanzadas
● Detección de errores más rápido● Conocer las dependencias de un módulo● Recomendación de ubicación de un objeto
Lecciones aprendidas - Código y objetos
mas fácil de testear
mas fácil de entender
mas fácil de mantener
Objetos mas chicos
Objetos parecidos quedan más cerca
Lecciones aprendidas - Forma de trabajo
Reutilizar conocimiento
Mejor manejo de la complejidad
Dividir el trabajo en grupos
Mas fácil de instalar
Mejor preparados para futuro
Futuro
Mejorar herramientas
● Trabajar con módulo + Interfaz● Especialización de módulos
Distribución de binarios
Incorporar seguridad?
Microservicios / Docker ...
Gracias!