Sé que esta es una (antigua) pregunta, pero me han señalado como un ejemplo del uso de "Ver modelo" en el contexto de MVC. Yo sostengo que esto es incorrecto y puede llevar a la confusión de las personas que son nuevas en los patrones de uno o ambos. Quien lo está haciendo, stahp. Aquí está el por qué (e incluso es una respuesta a la pregunta original de una manera indirecta).
Un ejemplo de cuándo ocurre esto se puede ver en this question. El usuario está tratando de usar un modelo de vista que implementa INotifyPropertyChanged en una aplicación ASP.NET MVC, combinando así el diseño de aplicaciones web de escritorio y sin estado en un error arquitectónico y angustia.
En pocas palabras, no hay "Ver modelo" en el patrón MVC. No es, sin embargo, un equivalente funcional, y ese es el controlador.Para ser claros acerca de las partes y sus purpouses,
MVVM (aplicaciones de escritorio):
- Modelo - objetos de tipo fuerte que contiene los datos a transmitir entre la Vista y Vista Modelo
- Ver - La interfaz de usuario vista por el usuario y mediante la cual el usuario interactúa con el sistema
- Ver modelo - Interpreta las acciones del usuario (por ejemplo, a través de ICommand), las realiza, actualiza appl Estado icación
MVC (aplicaciones web):
- Modelo - inflexible de tipos * objeto que contiene los datos que se pasa entre la Vista y Vista Modelo
- Ver - Un generador de interfaz de usuario que combina el modelo, código y HTML para representar una página web
- Controlador - Acepta solicitudes de los usuarios, las interpreta, actualiza el estado de la aplicación y utiliza una vista para convertir este estado en una página web HTML
El Modelo es prácticamente la misma en ambos modelos. Los modelos de escritorio pueden implementar notificaciones de eventos de actualización, los modelos web pueden ser dinámicos (es decir, no están fuertemente tipados), y ambos pueden incluir o no métodos de validación o metadatos.
La vista en el escritorio es lo que ve el usuario. En la web, es un generador que genera HTML para que los navegadores lo muestren en el lado del cliente. Debe interpretar la interacción del usuario en el escritorio, pero en la web que se maneja mediante javascript del lado del cliente, el navegador y las solicitudes que se envían al servidor.
El modelo/controlador de vista son prácticamente equivalentes funcionalmente, pero difieren mucho en cómo se implementan y cómo funcionan. En el Modelo de vista, la interacción del usuario con la aplicación se transfiere a Ver modelos a través de ICommands, eventos enrutados y otros métodos (muchos marcos MVVM proporcionan diferentes formas de enganchar Modelos de Vista a la UI y otras partes de la aplicación). En un Controlador, aparece una solicitud con toda la información necesaria para que el Controlador devuelva un resultado al usuario (suponiendo que sea una solicitud de 200 OK). El Controlador debe realizar cualquier trabajo que sea necesario para crear el estado (también conocido como Modelo) necesario para el generador HTML (la Vista) para crear la respuesta. Desde el punto de vista del diseño, el Controlador se encuentra sobre la Vista y el Modelo conociendo y controlando ambos, mientras que el Modelo de Vista se ubica al lado de la Vista, pasando el Modelo (y otra información) entre ellos.
Lo que realmente parece confundir a algunas personas es que hay marcos MVVM del lado del cliente que puede mezclar en su aplicación MVC. Estos existen únicamente en javascript en el navegador del usuario, y no tienen nada que ver con el patrón particular que está siguiendo en el lado del servidor. Puede ejecutar un sitio web ASP clásico que usa MVVM en el lado del cliente. Demonios, puedes ejecutar páginas HTML estáticas que usan MVVM en el lado del cliente. Ellos son eso separados.
Estos marcos javascript MVVM generalmente siguen un patrón similar al patrón MVVM de escritorio descrito anteriormente, pero ajustado para trabajar más en sintonía con la naturaleza del HTML DOM y javascript. Por ejemplo, no existe un sistema de enlace extenso entrelazado en el DOM, y javascript tiene un sistema de tipo muy limitado, por lo que emparejar plantillas a modelos es muy diferente que en WPF. También suelen funcionar desconectados del servidor, y cuando necesitan interactuar, prefieren las llamadas AJAX en lugar de POSTear la página de vuelta al Controlador (las llamadas AJAX normalmente las manejan los Controladores WebAPI en ASP.NET MVC).
Por lo tanto, para resumir, realmente no hay un modelo de vista en MVC. El controlador es el equivalente aproximado, pero es muy diferente en cuanto a cómo recibe la entrada del usuario, la interpreta y devuelve un resultado al usuario. Usar el término "Ver modelo" para referirse a cualquier cosa en MVC solo puede generar confusión y, por lo tanto, debe evitarse. Use los términos apropiados para las partes apropiadas del patrón. Puede parecer pedante, pero debería ayudar a mantener las cosas claras y ser menos confuso para las personas que son nuevas en ambos patrones.
En la práctica; ViewModel en ASP.NET MVC no permite 'Magic Strings' en la Vista; y proporciona un modelo muy tipado para la visualización (Intellisense incluido y todo ese jazz). De lo contrario, excelente respuesta. –
Buena respuesta. @George: Aún puedes usar Magic Strings en MVC ... esto no es una preocupación de MVC ... no hace nada para evitar esta práctica. –