Recientemente he aprendido sobre el patrón de diseño MVC. Estoy aprendiendo del libro Head First Design Pattern.
De acuerdo con este libro (si entiendo correctamente):
El modelo es la mayor parte de la lógica y los datos de la aplicación.
La Vista es básicamente la GUI que representa el Modelo visualmente para el usuario.
El Controlador es responsable de "mediar" y actuar como un "intermediario" entre la Vista y el Modelo. La Vista informa al Controlador que el usuario realizó una acción, y el Controlador la traduce a llamadas de método en el Modelo.
Sin embargo, muchos lugares en la web contradicen lo que entiendo de ese libro. Afirman que, en general, el usuario interactúa con el Controlador, no con la Vista.
¿Cuál es verdadero o más común? ¿El usuario interactúa directamente con el controlador o con la vista directamente? ¿Son aceptables ambos enfoques? ¿Cuál es más común?
fuente
Respuestas:
El usuario interactúa con la Vista , pero la Vista debe comunicar las acciones al Controlador . El controlador puede actualizar el modelo , pero no se requiere con cada / cualquier cambio.
La descripción que proporciono se basa en mi experiencia personal con la implementación .NET de MVC. Su implementación puede ser diferente.
El controlador es donde se procesan las acciones, básicamente una capa empresarial. Un controlador simple no hará más que obtener los datos del Modelo para alimentar a la Vista. Un controlador complicado realizará todo tipo de acciones, hasta la gestión de seguridad, autenticación, autorización, registro y posiblemente muchas otras cosas.
La Vista solo debe ser responsable de mostrar la información de una manera que el usuario pueda entender. Puede haber algún cruce aquí tanto con el Controlador como con el Modelo, ya que cosas como las Aplicaciones de Página Única (SPA) tendrán comentarios de validación de datos para el usuario. Cualquier otro cruce está muy mal visto.
El modelo trata con datos. Esto incluye la validación de datos (cuando corresponda). El almacenamiento y la recuperación de datos también se manejan en esta capa.
ACTUALIZAR
Parece haber cierta confusión sobre quién hace qué y cuándo. Incluí dos vistas generales diferentes de las arquitecturas MVC porque son similares, pero no iguales. Hay espacio para cualquier interpretación. Posiblemente, muchos más. Las descripciones anteriores son mi interpretación de MVC de múltiples fuentes, incluida mi propia experiencia en la creación de aplicaciones utilizando esta metodología. Con suerte, esta actualización ayudará a aclarar algo de esta confusión.
MVC es un intento de construir un patrón de diseño de Separación de preocupaciones para el desarrollo de software. Se ha implementado principalmente en aplicaciones basadas en web (que yo sepa).
La Vista maneja toda la interacción del usuario. Si su usuario hace clic en un botón, la Vista determina si el clic es una interacción de la interfaz de usuario o algo que está más allá de su interés (una interacción del Controlador). Si el botón hace algo como copiar valores de un campo a otro, su implementación determinará si eso es un problema de Vista o un problema de Controlador. Lo más probable es que solo tenga esta confusión de preocupaciones cuando trabaje con una Aplicación de página única (SPA).
El controlador es donde se procesan sus acciones. La Vista ha comunicado que el usuario decidió cambiar los valores de algunos campos. El Controlador puede realizar la validación de esos datos o puede ser manejado por el Modelo. Nuevamente, esto depende de la implementación. Si el controlador tiene características de seguridad, puede determinar que el usuario no tiene suficientes privilegios para realizar la acción. Rechazaría los cambios y actualizaría la Vista en consecuencia. El Controlador también determina qué datos recuperar del Modelo, cómo empaquetarlos y actualizar la Vista con esos datos.
El modelo determina cómo y dónde almacenar los datos. También puede realizar la validación de esos datos antes de almacenarlos (debería hacerlo porque las personas omitirán la Vista en ocasiones).
Wikipedia tiene un artículo sobre MVC .
Del resumen de Microsoft de MVC .
fuente
url-routes
, ubicada en elController
. Me refiero a ninguna vista en absoluto ...El usuario interactúa con el controlador . Desde el punto de vista técnico, no estás interactuando con la Vista , solo la estás usando para interactuar con el Controlador .
En la superficie, parece que el usuario está interactuando con la GUI; también para un no programador, esto tiene más sentido, sin embargo, al hacer clic en un botón, básicamente está hablando con el Controlador, no con la Vista .
Además, no todas las aplicaciones, incluso las aplicaciones web MVC, tienen una GUI. Puede interactuar con el controlador a través de una API, simplemente simple,
url-routes
por ejemplo, ubicado en el controlador .El controlador debe ser el lugar que recibe y maneja las solicitudes del usuario. Entonces, si de alguna manera está accediendo al Modelo directamente desde la Vista , no importa cómo, entonces ya no es MVC .
fuente
Usemos un ejemplo concreto de por qué los usuarios interactúan directamente con vistas y no con controladores.
En la aplicación de música en el iPhone, una función de alto nivel es reproducir una lista de reproducción. "Reproducir una lista de reproducción" es una función de un controlador de la aplicación.
Hay más de una forma de activar esa función. Puedo hacer clic en la lista de reproducción dentro de la aplicación, o puedo pedirle a Siri (interfaz de voz) que realice la misma función. Esos son dos gestos diferentes que son reconocidos por los diferentes puntos de vista.
La retroalimentación en cada vista también es diferente. Siri le dirá que está reproduciendo la música que solicitó. La aplicación de música le mostrará una respuesta visual de que está reproduciendo la lista de reproducción.
fuente