Por aplicaciones mas modulares...

En el post anterior sobre módulos, nombraba algunas características que serian buenas para mejorar en los módulos y algunas de ellas, no tenían nada que ver con los módulos, sino que era para lograr aplicaciones mas fáciles de modularizar.

Algunas personas me hicieron preguntas, por lo que voy a tratar de explicar mejor lo que quise decir.

Hoy GeneXus genera las transacciones de la forma:


La transacción Deposito, accede a la tabla DEPOSITO (para hacer alta / baja y modificaciones de los datos) y también al tabla CIUDADES, para controlar que exista la ciudad del deposito si estoy agregando o modificando. A su vez, la transacción Ciudad, accede al tabla CIUDADES para el ABM y a DEPOSITOS para chequear si se puede borrar una CIUDAD (y no deja borrar si existe un depósito con esa Ciudad, para controlar que no queden datos inconsistentes.

Con la forma actual de módulos, para no tener errores, hay que definir las transacciones Ciudad y Deposito con Visibility=Public y por lo tanto, las tablas también quedan publicas.

Una forma alternativa de generar las transacciones seria, hacer las validaciones con Data Providers.
Esto es, en vez que la transacción acceda directamente a las tablas con las cuales tiene integridad transaccional, que llamen a objetos que puedan hacer las validaciones.
Que ventajas tiene esto?

Las transacciones quedan mas chicas (menos código) .
Las transacciones pueden quedar privadas y por lo tanto también las tablas.

Supongamos ahora que tengo que cambiar el DBMS de la tabla de CIUDADES. En el esquema anterior, debería regenerar la transacción Ciudad y Depósito.
En el nuevo esquema, solo tendría que regenerar la transacción Cuidad y el Data Provider ExisteCiudad.

Al hacerlo de esta forma, se podría dividir e instalar los modulos como microservicios, si los DP se publican como servicios.

Supongo que es un poco mas complicado de generar, pero ayudaría mucho a no tener aplicaciones tan monolíticas.


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.