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 llamaGet_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
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.