mvc example java jsf java-ee model-view-controller

java - example - Comprender JSF como un marco MVC



crud jsf netbeans (4)

Estoy leyendo en JSF y me siento bastante confundido por qué JSF es un marco MVC (o al menos qué partes pertenecen a qué "carta").

Miré esta pregunta: ¿Qué componentes son MVC en el marco JSF MVC?

Leí allí si no lo mira en una vista agregada, el modelo es su entidad, la vista es su código XHTML y el controlador es el bean administrado. Mmm ... Ok, pero la vista a menudo no depende de llevar a cabo más llamadas de lógica de negocios que devuelvan un conjunto de entidades, por ejemplo, ¿la descripción aún se ajusta?

Un libro que leí lo describió como beans gestionados es el tipo de portador de "mensaje" que el Servlet Faces (Controlador) usa para invocar la capa empresarial (Modelo) y luego el código XHTML es la vista.

Hay tantas explicaciones y diferencias, así que no sé cuál o cómo entenderlo.


Creo que todos los informes aquí son correctos. Pero el principal punto de confusión surge para mí al mezclar las definiciones de los componentes de mvc provenientes del marco, aquí JSF, con los componentes de modelo y controlador que usted define en el diseño de su aplicación:

Supongamos que cambia de JSF a cualquier otro marco de interfaz de usuario web en su aplicación comercial: todavía tendrá un "modelo comercial" y un "controlador comercial". (En nuestros proyectos, simplemente llamamos a estos componentes "el modelo" y "el proceso"). ¿Qué significa esto? O bien no puede usar mvc para la descripción de la arquitectura general de la aplicación, sino únicamente para la interfaz de usuario, o puede tener que aceptar muchos componentes similares a los de un controlador en su pila completa de aplicaciones.

En una forma minimalista, es:

  • Modelo: Cualquier cosa que use para persistencia (Hibernate, JPA, etc.) y modelado de datos (Java Beans).
  • Vista: xhtml, jsp, etc.
  • Controlador: habas Mananaged.

JSF le da el poder de controlar sus solicitudes / respuestas. La forma en que crea el modelo / vista no está directamente conectado al concepto MVC de framework. Es solo una cuestión de elección. El concepto de MVC está relacionado con la organización del código.

Análogamente, Struts es un framework MVC, pero funciona principalmente como un controlador.

Creo que te ayudo a aclarar mejor tu idea.


Lo interesante de la idea del frijol administrado es que se puede usar como modelo (patrón MVC) o como controlador ( patrón MVC mediador-controlador , también llamado modelo-vista-adaptador), donde el modelo y la vista no interactúan directamente.

En este último caso, el mecanismo de enrutamiento no es el controlador, ya que la lógica comercial está contenida en el bean gestionado y el Modelo es estrictamente un modelo de dominio. Entonces tenemos:

  • Modelo : contiene el modelo de dominio, en la mayoría de los casos representa las tablas en la base de datos, persistió a través de DAO.

  • Vista : los componentes de la interfaz de usuario, conectados al bean;

  • Controlador : el bean administrado que contiene la lógica de negocios y maneja la comunicación entre la vista y el modelo.

Creo que algunas personas confunden MVC mediador-controlador como MVC simple, lo que lleva a las diferentes explicaciones encontradas.


Parte de la razón por la que a menudo no está del todo claro en JSF y en muchos otros marcos web qué partes corresponden a qué parte de MVC, es que el patrón MVC se diseñó originalmente para aplicaciones de escritorio.

En una aplicación de escritorio, los nodos M, V y C son un gráfico máximo conectado, lo que significa que cada parte puede comunicarse con cualquier otra parte. Por ejemplo, si el modelo cambia, puede impulsar este cambio a la vista. Esto es particularmente visible en caso de que haya múltiples representaciones de la vista en una aplicación de escritorio. Cambia uno y mira la otra actualización en tiempo real.

Debido al cliente / servidor y la naturaleza de solicitud / respuesta de las aplicaciones web, MVC clásico no asigna 1: 1 a la mayoría de los marcos web.

Específicamente, en JSF el mapeo es el siguiente:

  • Modelo : los servicios / DAO más las entidades que producen y consumen. El punto de entrada a esto es el bean gestionado, pero en Java EE (del cual JSF es parte) estos artefactos son implementados por EJB y JPA, respectivamente.
  • Ver : los componentes de la interfaz de usuario y su composición en una página completa. Esto está completamente en el dominio de JSF e implementado por JSF UIComponent s y Facelets respectivamente.
  • Controlador : el controlador de tráfico que maneja los comandos y los datos entrantes del usuario, dirige esto a las partes correctas y selecciona una vista para visualizar. En JSF uno no escribe este controlador, pero ya está provisto por el framework (es el FacesServlet ).

Especialmente la última parte con frecuencia no se comprende bien: en JSF no se implementa un controlador. En consecuencia, un bean de respaldo o cualquier otro tipo de bean administrado NO es el controlador.

La primera parte (el modelo) tampoco siempre se entiende con claridad. La lógica de negocios puede ser implementada por EJB y JPA, pero desde el punto de vista de JSF, todo lo que se referencia por un enlace de valor es el modelo. Aquí también es donde proviene el nombre de una de las fases del ciclo de vida JSF: Update Model . En esta fase, JSF envía datos de los componentes de la interfaz de usuario al modelo. En ese sentido, los beans gestionados (JSF) son el modelo.

Aunque JSF por sí mismo no define explícitamente el concepto, hay un uso recurrente y específico de beans administrados llamado bean de respaldo .

Para JSF, un bean de respaldo sigue siendo el modelo, pero prácticamente es un elemento de plomería que se encuentra en el medio del Modelo, Vista y Controlador. Debido a que realiza algunas tareas que pueden verse como algunas tareas del controlador, a menudo se confunde con el controlador. Pero, como se explicó antes, esto no es correcto. También puede realizar algunas tareas del modelo y ocasionalmente también hacer un poco de lógica de visualización.

Ver también: