Modularizar una KB grande.

Problema:
Tengo una KB con mas de 10.000 objetos y se debe organizar en módulos mas pequeños.

Se necesita:
Metodología que permita realizar dicha modularización, de forma de mantener el funcionamiento del sistema generado a partir de la KB.

Metodología propuesta. 

Bajar una KB desde GXServer.
Hacer un build all exitoso (es importante pues se agregan referencias a tablas)

Mientras queden objetos de la aplicación sin módulo hacer:

  1. Elección que modulo se va a  crear  y cuales seran sus tablas. 
  2. Sacar una lista de URL de todos los objetos de la KB
  3. Crear Modulo y poner Visibility como Private. 
  4. Mover los Folders correspondientes al Modulo. 
  5. Identificar todas las transacciones que generan las tablas del modulo y moverlas al modulo. 
  6. Sacar del modulo los objetos que no correspondan 
  7. Marcar como públicos los objetos interfaz del modulo. (Todos los dames se mantendrán privados por default)
  8. Revisar los objetos externos al modulo que usan tablas privadas del modulo y corregirlos.
  9. Corregir todos los programas que hagan UPDATE sobre tablas publicas del modulo. Todas las modificaciones deberan ser hechas a traves de objetos publicos del Modulo.  
  10. Hacer un rebuild all exitoso
  11. Comparar los WSDL del sistema y ver que no cambie nada. Si algun WS cambia de nombre, crear objeto con el nombre viejo y dejarlo en root. 
  12. Sacar una lista de las URL de todos los objetos de la KB y comparar con la anterior. Con las diferencias
    • Arreglar Deploy de DLL / Class que cambian de nombre
    • Arreglar Casos de pruebas por dll/class que cambian de nombre
    • Arreglar referencias externas (scheduler, script, command line, menu, documentacion) a dll/class que cambian de nombre
  13. Ajustar el indicador de (#Objetos en Modulos) /(#TotalObjetos)  
  14. Subir cambios a GXServer
  15. Asegurarse que Build/Deploy/Pruebas Automáticas/Pruebas Manuales terminen bien. 
  16. Documentar y avisar a los usuarios sobre url/webservices/archivos de comando 
  17. Instalar en producción
  18. Volver al primer paso
Es un trabajo bastante engorroso, y que lleva bastante tiempo, pero las ventajas son enormes, pues queda todo mucho mas ordenado y mas fácil de entender. Ademas "obliga" a que los nuevos desarrollos se hagan con la modularización en mente, pues fuerza a que se usen solo los objetos públicos de cada modulo. 

Luego de modularizar, es trivial sacar un modulo y llevarlo a otra KB, pues se tiene bien definido cuales son las interfaces del mismo y cuales son las dependencias de dicho modulo. 

La modularización de KB debería ser una tarea a tener en cuenta por los desarrolladores GeneXus.  

Comentarios

Entradas más populares de este blog

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Aplicación monolítica o distribuida?

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.