Arquitectura MVC sobre aplicaciones Powerbuilder empresariales
La arquitectura de desarrollo MVC como lo saben y me voy a dar el tiempo de resumir, es poder separar en 3 capas lógicas una aplicación, La Vista que es lo que inter actual con el usuario y su función principal es poder llevar información al usuario, y tomar capturar datos que luego serán enviados a la capa lógica denominado el Controlador, esta capa es la que tiene la obligación de implementar el negocio que se quiere desarrollar y se vale de la capa lógica denominada el Modelo para persistir datos y extraerlos de una fuente de datos.
En PB tenemos todos los estos componentes y los explico a continuación:
La vista: contamos con los objetos windows, userobject, menu, singlelinetext, statictext, datawindows object, datawindows, multilineedit, editmask y en general de todos los objetos considerados visuales, además de funciones que prestan servicios visuales o de interacción con el usuario como son los messagebox y las funciones para invocar las common dialogue
El controlador: nonvisualobject(NVO) personalizados (es la base de todo), el datawindows, datastore, los proxys y en general todos los objetos considerados no visuales, a excepción del transacción object
El modelo: en este caso solo podría nombrar al transaction object que es el único objeto que negocio con la unidad de almacenamiento
Los objetos en las 3 capas inter actúan, hay que saber separar cuando u proceso es de vista, de controlador o de modelo para poder comenzar a trabajar, uno de los vicios de la programación visual es la de desarrollar procesos propios de una capa logia en otra, como pro ejemplo y es muy común ver, que se tenga en proceso de recálcalo de un inventario en un botón o que un NVO lance un mensaje por pantalla, llamar a una función global para reajustar las posiciones de una ventana especifica, hacer que un código dentro de la ventana que busque información en otra ventana. Este tipos de practicas a la cual considero un vicio con nombre y todo ("Programación orientada a botones") no niego que sea una solución perfectamente rápida, lo es, pero como todo vicio trae consecuencias perjudiciales como lo son el aumento del acoplamiento de la aplicación, la dificultad de escalamiento, reduce entendimiento del código y lo peor de todo, impide la reusabilidad de la funcionalidad. Es por esto que hay que estar bien claros en que procesos son de vista, cuales los de controlador y en cuanto a las de modelo no existen tantos problemas porque el Powerbuilder se implementan por un mismo canal que es el objeto de transacción
El datawindows lo considero el mas peligroso de los vicios, porque presenta las 3 capas en si mismo, tiene la vista que presenta los datos y permite editarlos, se le pueden agregar comportamientos y reglas de negocio o incrustárselas en tiempo de ejecución y además permite persistir... es muy importante hacer diferencia de cuando es necesario crear un datawindows que presente datos, un datawindows para obtener datos, un datawindows para usarse como un recordset y cuando lo utilizaremos para persistir pero no recomiendo en ninguno de los caos hacer uso de los 3 usos sobre un mismo DW, ya que este no permite por lo menos heredar para especializar sus funciones y por mi misma experiencia he tenido que desvirtuar DW o crear muchos iguales porque mi aplicación creció y lo que necesito ver en pantalla no es necesariamente la misma estructura que necesito como estructura de datos
En el proximo post dare unos ejemplos de como seria una buena practica de desarrollo MVC que sea lo suficientemente escalable y lo suficientemente sencilla como para poder hacer aplicaciones rapidas y a la vez reutilizables