CHAPTER 3. RESEARCH METHODS
3.3 A NALYTIC S TEPS
3.3.3 Step 3: Coding
El núcleo de funcionamiento del WMVC Framework que cumple el rol de controlador del Model - View – Controller posee ciertos elementos que debemos detallar de manera de que se entienda la existencia de cada uno y que utilidad brinda.
4.3.1.1 Acciones
Una acción en el WMVC Framework, es un conjunto de instrucciones que producen cambios en el modelo de la aplicación, y obtienen los resultados que la vista mostrará en las páginas Web. Estas acciones permiten que la vista de la aplicación no necesite conocer como es el modelo sino solo de qué manera puede interactuar con él.
Estas acciones son implementadas por el usuario y son la implementación del patrón de diseño Command. En el caso particular del framework las acciones deben heredar de la clase abstracta WMVC.Action. Para llamarlas desde la vista, cada acción posee un texto identificador no dependiente del nombre de la clase de manera de permitir nombres más amigables y además conseguir una separación entre el nombre de las clases y el modo de llamarlas.
Figura 4: Ejemplo de una acción de WMVC
En dicha acción se puede ver como en la primera línea obtiene el object model, para luego en la segunda consultar al modelo de la aplicación. Una vez finalizada la consulta, el modelo retorna un usuario que corresponda con ese usuario y contraseña e inmediatamente es seteado como estado siguiente del sistema “userHome” indicando que el usuario se ha logueado correctamente.
4.3.1.2 ObjectModels
Los object models en el WMVC Framework son entidades que solo almacena datos. Estos objetos independizan a los objetos del modelo de la forma en que los mismos son mostrados en la interfaz de la aplicación.
Cada acción puede definir un object model de entrada y uno de salida. El de entrada es cargado en la vista con información que proviene del cliente y es información que la acción necesita para comunicarse con el modelo. Por ejemplo para el caso de una acción de “logueo a un sistema” en la figura 5 se puede ver que el object model de entrada tendría un username y un password ambos en variables de tipo string.
El object model de salida se usa generalmente para pasar información que se desee mostrar desde el modelo hacia la vista. Volviendo nuevamente al ejemplo del logueo al sistema, el object model de salida podría ser una clase que posea información del usuario y un valor booleano indicando el éxito o fracaso de la acción de logueo. En caso que la acción haya finalizado exitosamente entonces información del usuario también le es enviada a la vista de manera que la misma pueda mostrar un mensaje de bienvenida con el nombre completo del usuario.
Figura 5: Ejemplo de ObjectModel de WMVC
Así, mediante la utilización de estos object models o Data Transfer Object (DTO) se logra cierta independencia entre la vista y el modelo. Las responsabilidades están bien claras: mientras que la acción es la encargada de cargar los object models con la información del modelo, la vista únicamente debe conocerlos y saber mostrarlos.
4.3.1.3 Estados resultantes de la ejecución
Una vez que se concluyó con la ejecución de una acción, ésta debe indicar la siguiente vista a mostrar. Los estados son simplemente ese resultado. El estado representa un nombre que identifique al desarrollador un estado lógico del resultado de la acción que acaba de finalizar. A partir del estado indicado, la configuración obtiene los diferentes tipos de vistas que tiene la aplicación y de esta forma, dado que el requerimiento original sabe a partir de que tipo de vista se generó, se obtiene la siguiente vista.
Para el ejemplo que se viene usando, una vez confirmado el logueo correcto del usuario al sistema, se setea “userHome” como estado del sistema, indicando que de la vista de login debe dirigirse a la vista del home del usuario.
4.3.1.4 Vistas
Las vistas son pequeños objetos que tienen como único fin mantener una asociación entre un tipo de vista (web, mobile, etc.) y una dirección que la represente (dirección web para tipos de vista web y mobile, y cualquier otro para otro caso) de manera que, luego de finalizar la ejecución de una acción se determine, según el tipo de vista, cual es la dirección a la que se debe transferir el control.
En el ejemplo del “logueo del usuario”, para el caso particular estado resultante
“userHome” podría indicarse que para una aplicación web se redirija a la página “home.aspx”
mientras que para una aplicación mobile lo haga a “mobile/home.aspx”.
4.3.1.5 Validadores
Los validadores son objetos que en forma parecida a las acciones se ejecutan. La diferencia con las acciones, es que éstos tienen como único objetivo determinar, en forma previa a la acción, si ésta debe ejecutarse o no en el contexto actual.
Ejemplos de validadores podrían ser validaciones de: • Existencia de usuario logueado en la aplicación. • Permisos del usuario para la acción a ejecutarse.
• Acciones que se ejecuten solamente para determinado tipo de usuario.
• Verificación de existencia de cierta información en el contexto, como podría ser la necesidad de existencia de información previamente cargada. Un ejemplo podría definirse para la función de modificación de ciertos datos dado que si los mismos no han sido cargados se debe cortar la ejecución de la acción.
• Acciones que se ejecuten solo ante un estado determinado del modelo. Ejemplo de esto podría ser la comprobación de la ejecución de algunos pasos o acciones anteriores en un asistente
Estos validadores permiten que las validaciones no deban repetirse en todas las acciones sino que ocurra antes de las mismas. Así, no solo logramos independizar la validación de la ejecución de la acción sino que además conseguimos que el código de la acción sea más limpio y modificable.
4.3.1.6 Configuración
Dado que el usuario es quien debe definir tanto las acciones, como los object models, los estados y sus vistas, es necesaria la existencia de un método fácil de usar, mantener y aplicar que permita relacionar todos estos elementos.
El WMVC Framework posee un conjunto de archivos en formato xml que permiten, a partir del wmvc.config configurar totalmente la aplicación web. Se eligió el formato xml para configurar la aplicación debido a que este formato contiene estructuras legibles y permite que un desarrollador o diseñador de la aplicación pueda configurar la misma sin tener que conocer un lenguaje específico. Por otra parte, la extensión de estos archivos es .config debido a que el .NET Framework maneja todas las configuraciones mediante archivos con formato xml pero con la extensión recién mencionada, por lo que era necesario respetar el estilo utilizado por el framework base.
La función del configurador de cada aplicación web es levantar los archivos de configuración e interactuar con el controlador para que éste último ejecute las acciones de manera correcta. Es importante entender la funcionalidad que cumple el configurador dentro del framework ya que todo el funcionamiento de la aplicación depende de ello.
La configuración de una aplicación se encuentra dividida en varios paquetes con el objetivo de separar las distintas funcionalidades de la aplicación web a configurar, de la misma forma que se encuentra dividida en paquetes cualquier aplicación orientada a objetos. Cada paquete representa un archivo de configuración distinto y dentro de cada uno se definen las acciones, object models, estados y subpaquetes del mismo además de la relación que tienen entre ellos y con el modelo de clases (Action, ObjectModel, etc.) que se está configurando.