Eliminando dependencias o Cambiando dependencias para tener un diseño modular.

Una de las tareas mas importantes cuando se está modularizando una base de conocimiento (o cualquier sistema) es diseñar nuestros componentes de software de forma que cada uno de ellos pueda ser lo mas independiente de los demas (bajo acoplamiento).

En mi experiencia de modularizar bases de conocimiento, he visto muchas veces que se definen Dynamic Combo Box con una definción de atributos.

Esto trae como consecuencia, que el objeto que tiene ese Dynamic Combo Box, hace una referencia explicita a la tabla que contiene los atributos CountryID y CountryName.

Si este objeto no esta en el mismo modulo que la tabla Countries, dicha tabla va a tener que quedar publica.

Una forma muy sencilla de evitar esta dependencia, es basar el Dynamic Combo Box, en un Data Provider en vez de usar directamente los atributos.

De esta forma, el programa, en vez de hacer una sentencia "Select CountryID, CountryName from Countries", hara una llamada a el Data Provider.

Que ventajas y desventajas tiene este método?

Si tengo varios objetos que tengan Dynamic Combo Box definidos con atributos, las referencias van a quedar de la forma.


La tabla debe ser publica, pues se usa desde mas de un modulo. Cada vez que cambie la tabla, voy a tener que regenerar todos los Webpanels de diferentes modulos.

Usando el data provider, las referencias quedan de la forma:


Los objetos, hacen referencia a un data provider, que es el unico que vera la tabla y por lo tanto esta puede quedar privada. Da mayor indpendencia, a poder cambiar la tabla sin afectar el resto del sistema.

Esto nos da mas libertad, por ejemplo si necesitamos mover el modulo que incluye la tabla Countries a otro servidor o a otra webapp, se puede hacer cambiando el funcionamiento del data provider únicamente.

Es un arreglo muy sencillo y chiquito que ayuda a tener nuestros sistemas mejor modularizados.

Comentarios

Entradas más populares de este blog

Paleta de colores en GeneXus

Impresión directa a impresora en el WEB con aplicaciones GeneXus.