En síntesis este patrón es una solución efectiva al problema de arquitectura
que plantea la necesidad de separar la parte de la presentación o vista y la
parte de los datos o modelo. En el patrón MVC esta separación se consigue
introduciendo un tercer componente, el Controlador.
Pero veamos como el patrón encaja en una aplicación web empresarial
basada en la tecnología Java EE como la nuestra y cómo cada parte M, V y C
se sitúa dentro de una arquitectura por capas típica.
En cuanto a la segunda cuestión las tres partes del patrón MVC se sitúan en
Java EE dentro de la capa de presentación de la aplicación. Aunque si
consideramos a M como la representación del modelo completo, entonces
esta parte estará situada en las capas de negocio y persistencia.
La correspondencia entre cada parte M, V, y C y cada uno de los elementos
de la aplicación es la siguiente:
• Modelo: Es una representación del modelo (lo escribo en negrita para
distinguirlo con claridad) de la aplicación entendido este último como
todo el conjunto de datos y toda la lógica de negocio que procesa
esos datos. En JSF el Modelo se implementa en las clases managed
bean, también conocidos como backing beans. El modelo tiene una
parte de datos y otra de comportamiento. Veamos cada una por
separado:
• Parte de datos del modelo: Son los beans de entidad JPA de la
capa de persistencia. En el Modelo se representan como
atributos de los managed beans con el mismo tipo que los
entity beans JPA.
• Parte de comportamiento del modelo: Son los beans de sesión
EJB de la capa de negocio/DAO/servicio. En el Modelo se
representan dentro de los métodos de evento de los managed
beans, como llamadas a los métodos de estos beans de sesión.
En resumen, el Modelo se implementa en los managed beans y es una
representación o punto de acceso al modelo de la aplicación.
• Vista: Constituye también la vista de la aplicación. Aquí se sitúan los
elementos para la entrada y salida de datos de usuario
implementados con la tecnología Facelets de JSF y con el lenguaje EL
de expresiones.
Los elementos JSF de la Vista son:
• Páginas xml Facelets.
• Ficheros de recursos para soporte multiidioma, etc.
• Clases representando conversores, validadores y listeners.
• Propiedades de la Vista en las clases managed bean.
• Elementos que extienden la Vista: Renderers y componentes
propios.
• Controlador: Es algo que no tendremos que implementar nosotros ya
que lo proporciona JSF a través de la clase FacesServlet. Gestiona las
acciones del usuario sobre la Vista y muestra la información
adecuada en la misma.
El patrón MVC por un lado implementa buena parte de la capa web para
nosotros, además facilita la organización del código dentro de esta capa, y
por último hace posible la separación entre la vista y el modelo de la
aplicación. Esta separación permite dividir el trabajo de desarrollo en grupos
especializados: Un grupo de trabajo para la interfaz de usuario, que conozca
muy bien la tecnología JSF (ciclo de vida JSF, Facelets, componentes y
managed beans), librerías como PrimeFaces y conceptos como usabilidad o
UX (User Experience), y otro grupo que domine las tecnologías EJB/JAX-RS,
JPA (Hibernate), técnicas de mapeo eficiente y tunning de bases de datos,
conocimientos adicionales en Oracle Forms para migraciones, etc. La
tecnología CDI debería ser conocida por ambos grupos aunque más en
profundidad por el segundo. Además de estos dos grupos existiría otro más
orientado al aspecto visual y dinámico de la página y cuyos expertises
serían JavaScript de cliente, JQuery, HTML5, CSS3, Bootstrap (Interfaces
adaptativos), UX, accesibilidad, etc.