Módulos en Genexus.

Hace unos días conversando con colegas de la comunidad Genexus,  en una charla por otro tema, comenté un problema que me hace pensar desde hace tiempo. Ese no era el lugar para hacer planteos técnicos.

Los módulos son un objeto con muchísima potencia, muy sub utilizados y que les falta poco para obligar a una programacion modular en Genexus.

Cual es el principal problema?

Voy a mostrar un ejemplo ultra sencillo y pero creo que representativo.

Para los programadores GeneXus que recién están empezando,  es mucho mas facil escribir

for each
    where EmpresaID=&EmpresaId
        &NombreEmpresa=NombreEmpresa
endfor

que buscar cual es el procedure que devuelve el nombre de la Empresa y poner

&NombreEmpresa=GetEmpresa_Nombre(&EmpresaID)

En KB Grandes, es realmente dificil y lento encontrar cual es el objeto que tengo que llamar para traer el nombre de la empresa. No hay una forma facil de buscar los objetos publicos y solo teniendo una disciplina en la nomenclatura se puede tener buena productividad.

Que le agregaría/arreglaria a los módulos?


La mayoría de los cambios necesarios, no son en los módulos en sí, sino en pensar un desarrollo que tenga en cuenta los mismos.

Tablas publicas o privadas.


Se puede definir si una tabla es privada, interna o pública a través de su transacción. Muchas veces es deseable tener la transacción privada y Genexus me obliga a definir la pública, para mantener la integridad referencial.

Supongamos que tengo un modulo EMPRESA, que tiene una tabla Empresas, que es referenciada por otras tablas.

A mi me gustaría poder mantener la integridad referencial, pero impedir que la tabla Empresas, sea actualizada o borrada desde fuera del módulo.

Si es Publica, Genexus permite el acceso desde fuera del módulo y valida la integridad referencial y los joins entre tablas de diferentes módulos sin error.

Si es Privada, tengo que sacar la integridad referencial entre tablas y programar dichas validaciones en mis programas. Si alguien pone un for each sobre la tabla Empresas da error, lo cual es muy bueno.

Seria bueno tener un punto intermedio, donde pueda tener tablas privadas, pero que mantengan la integridad referencia y tenga posibilidades de hacer join con otras tablas. 

Integridad referencial


La validación de la integridad referencial sería bueno tenerla en procedimientos en vez de tenerlas en el código de las transacciones.
De esta forma si dos transacciones comparten la misma validación contra la tabla Empresas, no tenga que generarse código repetido.

Los objetos que validan la IR deben estar asociados y en el mismo modulo que la tabla, de forma automática.

Serian para chequear existencia, de una determinada clave en la tabla.
Permitirian la integridad referencial, sin tener que poner la tabla como publica.

Selector de Objetos. 

Cuando estoy trabajando en un objeto de un modulo, me interesa poder identificar los objetos todos aquellos objetos que puedo llamar, cuando voy a hacer un insert object.

Los objetos que puedo llamar, son todos los objetos de mi modulo + los objetos publicos de otros modulos. Hoy no es posible seleccionar objetos por si son publicos o privados.

Estaria bueno que al selector de objetos, le agreguen la posibilidad de filtrar por la propiedad Visibility de los objetos. En KB grandes ayudaria muchisimo a encontrar los objetos de otros modulos.

Desde mi punto de vista, son cambios bien pequeños que ayudarian a que los modulos sean mas utiles.






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.