Modularizar sin modulos.

Cuando trabajamos con GeneXus Evolution 3 o superior, una de las funcionalidades que mas ayudan a mantener el desarrollo ordenado, es la de los Módulos.

Una de las consecuencias de usar Módulos en la KB es que cambian el nombre de los objetos:

  • Cambia la URL de las aplicaciones WEB
  • Cambia el nombre de los web services publicados
  • Cambia el nombre de los procesos batch command line

Me ha tocado trabajar en KB que vienen de versiones anteriores de GeneXus que en las cuales es bueno usar la metodología de módulos, pero es difícil y costoso cambiar el nombre de los web services publicados por la aplicación, pues son usados por muchas empresas.

Estuve buscando una forma temporaria de trabajo, que me permita usar módulos, pero que no modifique los objetos y llegue a una metodología que no es matenible en el tiempo, pero permite avanzar en la modularización hasta llegar a algo mas definitivo.

Supongamos que tengo un Folder llamado  ALERTAS y quiero hacer un modulo con los objetos que contiene.

Tengo la opción, de convertir el folder ALERTAS, a un modulo con la opción Convert Folder to Module



Esta opción es muy practica y útil pero modifica todos los objetos que estan en dicho folder y los cambia (por el cambio de folder a modulo).

La opción que me gusta mas para estos casos es crear un Modulo nuevo que se llama MOD_ALERTAS y muevo el folder ALERTAS a dicho modulo
De esta forma los objetos que están dentro pertenecerán al modulo pero no se modifican y por lo tanto no quedan modificados para subir al server.

Luego trabajo en la modularización pasando los objetos a privados o públicos. Para hacer mas fácil este proceso, hice una opción en el KBDoctor que permite especificar todos los objetos de un modulo, mas todos objetos que referencian a algún objeto del modulo y también todos los objetos que referencian a tablas del modulo. De esta forma, ahorramos un REBUILD ALL que demora mucho.

Una vez terminada la modularizacion, lo unico que tengo que hacer es volver el folder a su lugar original, fuera del modulo, y subir los cambios al server.
De esta forma, tendremos las ventajas de la modularizacion, pero no cambiaran los nombres de nuestra API. Esto deja todo mas facil para cuando hagamos la modularizacion definitiva y con cambio de nombres.
Como contra, tiene que se pueden introducir errores de modularización en el futuro, pues GeneXus no puede controlar el uso de objetos privados. Por ejemplo, alguien podría hacer un for each sobre una tabla privada y como todo queda en el modulo Root, va a poder accederla.

Resumiendo, los pasos para modularizar el Folder XX serian:

1) Crear un modulo de nombre MOD_XX.
2) Mover el folder XX al modulo MOD_XX
3) Marcar todos los objetos del modulo como privados.
4) Marcar los objetos del API del modulo como publicos.
5) Ejecutar la opción Tools / KBDoctor / Modules / Build Module
6) Corregir los errores que aparezcan  en objetos que llaman al modulo, objetos que acceden a las tablas del modulo, etc.
7) Volver a 5 hasta no tener errores.
8) Hacer un build all exitoso.
9) Mover folder XX a su lugar original.
10) Hacer otro build all (o rebuild all si no toma los cambios)
11) Subir cambios al server.

Cuando podamos modificar los nombres de los los objetos llamados desde afuera, ya podremos usar los módulos en forma efectiva y permanente, que es una solución mucho mas practica.

Comentarios

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

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.