martes, 4 de mayo de 2010

Exposición Componente Interfaz de Usuario MVP-VM

Hola,
Como comentaba en el anterior artículo en esta entrega trataré acerca del patrón MVP-VM que utilizo para Afasia Framework.
El siguiente diagrama muestra los elementos del patrón y sus relaciones para un Componente Interfaz de Usuario.


A continuación una explicación teórica del diagrama, existen ejemplos de las pruebas de concepto en http://sourceforge.net/projects/jmvpvmframework/. Estos ejemplos son el origen de Afasia Framework. Afasia Framework todavía no está disponible como tal para la descarga, aunque espero que no tarde mucho en estarlo.

El Modelo del componente

El Modelo representa a la información que maneja el componente, tendrá métodos que podrán acceder a la lógica de negocio o directamente a los DAO´s. No conoce al presentador, ni al View Model, ni a la vista. Para actualizar alguno de ellos tendrá que disparar un evento que llegará hasta sus observadores/suscriptores.
Este modelo es un subconjunto de lo que se entiende por Modelo del Dominio, es decir, este modelo contendrá un subconjunto de toda la información del problema a modelizar para dar respuesta a la solución final.


El Presentador del componente

El Presentador representa al artefacto que se encarga fundamentalmente de relacionar o unir los diferentes elementos pertenecientes al componente.
El Presentador es el punto de entrada para lanzar el componente pasando a estar disponible para el usuario.
Conoce al Modelo, Vista y View Model específicos del componente.
Tiene la función de entrega del evento al elemento correspondiente para actuar en consecuencia.
Conoce también a los presentadores de posibles componentes padres e hijos para delegar comportamientos específicos sobre los componentes padres o hijos.
Se encarga de los puntos extensión para poder acoplar y acceder a nuevos componentes. Por ejemplo, el menú de aplicación tiene que permitir operaciones para poder manipular el menú ante nuevos componentes y poder acceder/instanciar los nuevos componentes.


El View Model del componente

El View Model hace de nexo entre la vista y el modelo. El View Model sólo conoce al Modelo y al Presentador. El Modelo lo necesita para poder recuperar las estructuras de datos a petición de la vista con el fin de realizar el binding de la información. El Presentador lo necesita para conocer el modelo cuando recibe un evento lanzado desde otro componente y así poder actualizar su vista a partir del modelo.
Gracias a este mecanismo podríamos cambiar la vista manteniendo el mismo Presentador, Modelo y View Model.
Es en este elemento donde realizaremos el formateo de la información para que se muestre en la vista, por ejemplo, las fechas, importes u otra información deseada.


La Vista del componente

Es la representación visual del componente.
La Vista conoce al View Model y es aquí donde realizaremos el Binding con cada una de las propiedades publicadas en el View Model. Actualmente utilizo JGoodies para realizar este binding, aunque esto tendrá que cambiar puesto que JGoodies únicamente soporta Swing.
Respecto a la delegación de los eventos producidos en la interfaz de usuario, por ejemplo, al pulsar un botón, pueden ser redirigidos al presentador o al viewModel del componente dependiendo del caso.
Teóricamente y lo que pretende Afasia, es poder reutilizar el mismo View Model, Modelo y Presentador con diferentes implementaciones de Vistas, por ejemplo en Swing, JavaFx u otro sistema. A día de hoy sólo funciona con Swing, a medida que evolucione el Framework añadiré lo necesario para otras representaciones visuales.


El elemento de la Vista quizás sea el más complejo, debido a las clases extra que permiten abstraerse de la implementación de la vista. El Framework trabaja a nivel de IView para que le de igual si es Swing, JavaFx u otro. La Vista Swing implementaría IBaseView

Los anteriores diagramas de clases son exactamente las implementaciones base de cada uno de los elementos que todo componente ha de heredar para poder ser utilizados dentro de Afasia Framework.

Espero vuestras críticas, comentarios al respecto para mejorar la explicación y que quede todo bien atado.

Un saludo,
Raúl