Modularizacion de servicios web sin afectar su funcionamiento

Problema:

Tengo un servicio web (REST o SOAP) desarrollado con versiones anteriores de GeneXus y quiero modularizar mi KB.  Por ejemplo, tengo un servicio que se llama 

Get_Clientes(&Tipo) 

que devuelve una Collection de clientes de un determinado tipo. 

Como el servicio viene de una versión anterior de GeneXus, donde no existían los módulos, queda en el módulo Root. 

En el proceso de modernización de la KB, se crea el módulo Clientes. 

Qué hacer con el objeto Get_Clientes()?

Si lo muevo al módulo Clientes, voy a afectar a los usuarios de dicho servicio, pues le va a cambiar la  URL desde donde lo consumen, pues el nombre del servicio pasará a ser CLIENTES.Get_Clientes()

Si lo dejo en el módulo Root, no afecto a los usuarios del sistema, pero la KB me queda mal modularizada, por ejemplo no puedo pasar la tabla de Clientes a privada del modulo. 

Solución:

Hay varias formas de solucionarlo, pero una forma sencilla, es dividir el servicio, en dos objetos. 
Uno que tiene la interfaz (Get_Clientes) y el otro que tiene la logica (Get_Clientes_core) 

Get_Clientes(&Tipo)         //Se mantiene en Root
   Get_Clientes_core(&Tipo) //Este puede moverse al módulo de CLIENTES 

De esta forma, los usuarios del servicio siguen accediendo a la misma dirección y por otro lado, la KB queda con todos los accesos a la tabla de clientes dentro del módulo CLIENTES, aumentando la cohesión y bajando un poco el  acoplamiento.  

La acumulacion de estos pequeños cambios llevan a que la KB sea mucho mas fácil de mantener, aunque en un principio no se vea el valor a realizarlos. 

Comentarios

Entradas más populares de este blog

Aplicación monolítica o distribuida?

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

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