tutorial traduccion framework design-patterns model-view-controller struts2 struts

design-patterns - framework - struts traduccion



¿Cuál es la acción utilizada en Struts 2 en términos de patrón MVC? (3)

En Struts2, un controlador envía una Solicitud a una Acción y la Acción lo pasa a la lógica de back-end, que podría considerarse como un "modelo" muy grande, para procesar la solicitud y JSP representa Vistas.

¿Cómo definir la acción en Struts2? Definitivamente no es View ... ¿es el controlador o modelo?


Definitivamente (es parte de) el Controlador, pero también es (parte de) el Modelo.

Mis 2 centavos:

La acción es el controlador porque ...

... en Struts2 el Controlador está compuesto por todos los responsables de leer, interpretar y manipular la solicitud, para proponer una respuesta adecuada, y por lo tanto, sí, la Acción es el controlador, junto con cada Interceptor en la Pila de Interceptor, y nosotros podría ampliar el significado para incluir el filtro, el ActionMapper, etc.

La acción es el modelo porque ...

... Struts2 es un marco Pull-MVC :

Pull-MVC y Push-MVC se entienden mejor con la forma en que la capa de vista está obteniendo datos, es decir, con el modelo que se va a procesar. En el caso de Push-MVC los datos (Modelo) son construidos y entregados a la capa de vista por los Controladores poniéndolo en las variables de ámbito como petición o sesión. Un ejemplo típico es Spring MVC y Struts1. Pull-MVC, por otro lado, pone los datos del modelo construidos normalmente en Controladores mantenidos en un lugar común, es decir, en acciones, que luego se procesa mediante la capa de visualización. Struts2 es una arquitectura basada en Pull-MVC, en la que todos los datos se almacenan en Value Stack y se recuperan mediante la capa de visualización para su representación .

Luego, en Struts2, la Value Stack es el Modelo, y la Acción se activa (en la parte superior) de ValueStack. Por lo tanto, la Acción es parte del modelo. Podríamos ampliar el significado de Model para incluir todo el ActionContext (con todos sus ámbitos - Página, Solicitud, Sesión ...)

Entonces, la Acción es el controlador cuando se encuentra dentro de su método execute() , y es el modelo cuando almacena los atributos que getSomething() del JSP a través de los getSomething() getter.

Y ahora, lo importante: NO use ModelDriven : o)


La acción definitivamente está cerca de los términos como controlador en lugar de modelo . Especialmente si usa REST con Struts2, puede leer Asignar REST URLs a Struts 2 Actions .

Acciones o controladores? La mayoría de los desarrolladores de Struts 2 están familiarizados con la Acción. Son las cosas que se ejecutan por las solicitudes entrantes. En el contexto del complemento REST, solo para mantenerte alerta, adoptaremos la jerga RESTful y nos referiremos a nuestras Acciones como controladores. No te confundas; es solo un nombre!

El controlador es responsable de manejar la solicitud y devolver una vista como resultado. Eso es lo que está haciendo la acción en Strust2.

El hecho de que los usuarios agreguen sus modelos con frecuencia con el controlador no extravía la definición del controlador. Entonces, si un controlador tiene un modelo, entonces puede pensar que es parte del gran modelo. No lo es

La parte nunca menos importante es la comunicación del modelo y la vista. En Struts2 se realiza a través del contexto de acción. La vista debe tener acceso al contexto de acción para recuperar el modelo. Esto está conectado por el OGNL .

El marco establece el contexto OGNL para ser nuestro ActionContext , y la pila de valores para ser el objeto raíz OGNL.

En la versión actual de Struts, la acción / controlador se envía a la pila de valores y se accede de la misma manera que un modelo. Es una operación inofensiva porque los controladores son instancias seguras para hilos. ¿Por qué no reutilizarlos como modelos?

También es inofensivo agregar un modelo de objetos al controlador y acceder a ellos desde allí. Puede asociar cualquier cantidad de modelos a la misma acción. Pero si piensas en un modelo, entonces puedes usar la acción ModelDriven . Pero el último no se recomienda porque trae una complejidad innecesaria a la arquitectura de la aplicación Struts2, y lamentablemente propenso a errores.


Las acciones Struts son controladores en el sentido del patrón MVC. Creo que la discusión de la pila de valores y ActionContext , así como los métodos getter en las clases de acción, confunden el problema. En general, estos son simplemente contenedores para otros objetos (generalmente objetos Modelo).

Mientras que @AndreaLigios señala que puede recuperar objetos de la acción usando varios métodos get, eso es más una cuestión de diluir la cohesión de acciones al darle responsabilidades adicionales normalmente asignadas al objeto modelo. Sí, es importante evaluar las responsabilidades de sus objetos cuando está considerando qué hacer (o debería estar haciendo).

En pocas palabras, las responsabilidades de los principales componentes en todo el marco de MVC son las siguientes:

  • Los objetos modelo son responsables de mantener los datos recopilados o calculados dentro de su dominio de aplicación.
  • Los objetos de vista son responsables de mostrar información a los usuarios u otros destinatarios (como clientes de servicio)
  • Los objetos del controlador son responsables de coordinar el flujo de datos entre el modelo y los componentes de vista.

Cuando observa un marco de MVC específico como Struts (o Spring MVC), verá que los frameworks generalmente proporcionan componentes Controller y View, pero es su responsabilidad construir usted mismo el modelo. Aun así, Struts proporciona una gran cantidad de objetos y componentes adicionales, como ActionContext , que facilitan el acceso a los objetos de su Modelo desde los componentes de su Vista.