Básicamente, Model y View Model son clases simples con atributos.
El principal objetivo de estas clases es describir ("Modelar") un objeto para sus respectivas audiencias que son respectivamente el controlador y la vista.
Entonces tienes toda la razón cuando dices
A mi entender, es un tipo de modelo que tiene un propósito específico de interactuar con la vista
Entonces, mientras que las clases de modelo son efectivamente entidades de dominio con las que interactúa su aplicación, los modelos de vista son clases simples con las que interactúan sus vistas.
Espero eso ayude :)
Actualización :
Microsoft ha desarrollado una versión especializada de Presentation Pattern de Martin fowler basada en gran medida en Model-View-Controller y la llamó Model-View-ViewModel (MVVM) para la aplicación PF. Este patrón está dirigido a plataformas de desarrollo de UI modernas donde los desarrolladores de UI tienen diferentes requisitos basados más en la lógica empresarial que los desarrolladores tradicionales. Echa un vistazo aquí para ver un poco de teoría.
En los términos más simples, me gusta pensar en lo siguiente:
Modelo: Se ve y se siente estrictamente como su modelo de datos. Para todos los efectos, es solo una representación de clase de su modelo de datos. No tiene conocimiento de su Vista ni de ningún elemento dentro de su Vista. Dicho esto, no debe contener ningún decorador de atributos (es decir, Requerido, Longitud, etc.) que usaría para su Vista.
Modelo de vista: sirve como un enlace de datos entre su vista y su modelo y, en muchos casos, también es un contenedor para su modelo. Se volvería inútil sin la Vista, por lo que normalmente no es reutilizable en múltiples Vistas y Controladores como lo es un Modelo estándar.
Como ejemplo, su modelo puede tener las siguientes propiedades, que son representaciones directas de su fuente de datos:
Ahora, dado que su modelo de vista está vinculado a su vista, puede tener la siguiente propiedad, que concatena el campo Nombre del modelo y el campo Apellido juntos como una sola cadena:
fuente
Encontré este artículo como un recurso muy útil para comprender cómo interactúan el "Modelo de dominio" y el "Modelo de vista" dentro de una aplicación MVC, particularmente en lo que respecta al enlace. Lo mejor de todo incluye ejemplos en lugar de descripciones abstractas.
"Desde que se lanzó MVC, he observado mucha confusión sobre la mejor manera de construir modelos de vista. A veces, esta confusión no es sin una buena razón, ya que no parece haber mucha información disponible sobre recomendaciones de mejores prácticas. Además, no hay una solución de "talla única" que actúa como la fórmula mágica. En esta publicación, describiré algunos de los patrones principales que han surgido y las ventajas y desventajas de cada uno. Es importante tener en cuenta que muchos de estos patrones han surgido de personas que resuelven problemas del mundo real ".
http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx
fuente
WikiPedia tiene una descripción más completa de Model vs. ModelView de la que obtendrá en una respuesta SO: http://en.wikipedia.org/wiki/Model_View_ViewModel
Yo cito:
Modelo : como en el patrón MVC clásico, el modelo se refiere a (a) un modelo de objeto que representa el contenido del estado real (un enfoque orientado a objetos), o (b) la capa de acceso a datos que representa ese contenido (un enfoque céntrico).
Vista : como en el patrón MVC clásico, la vista se refiere a todos los elementos mostrados por la GUI, como botones, ventanas, gráficos y otros controles.
ViewModel : ViewModel es un "Modelo de la Vista", lo que significa que es una abstracción de la Vista que también sirve en el enlace de datos entre la Vista y el Modelo. Podría verse como un aspecto especializado de lo que sería un controlador (en el patrón MVC) que actúa como un enlazador / convertidor de datos que cambia la información del modelo a información de la vista y pasa comandos de la vista al modelo. ViewModel expone propiedades públicas, comandos y abstracciones. El ViewModel se ha comparado con un estado conceptual de los datos en oposición al estado real de los datos en el modelo.
fuente
Existe una noción de ViewModel, pero generalmente no se asocia con Asp.net MVC. MVC usa el patrón de controlador de vista de modelo, donde el controlador maneja interacciones, genera datos del modelo y luego pasa esos datos a la vista para su visualización.
ViewModels (y el patrón Model View ViewModel) se asocia más generalmente con Silverlight y WPF. Xaml es un poco diferente en el sentido de que las vistas pueden vincularse bidireccionalmente a los ViewModels, por lo que la tecnología es un poco diferente. Por ejemplo, si vincula un cuadro de texto a un campo, mientras escribe en ese cuadro de texto, el valor del campo se actualiza dinámicamente. Este tipo de interacción no es realmente posible en las páginas web, ya que las páginas web no tienen estado.
La similitud entre los dos patrones es que ambos intentan separar la lógica de la pantalla. El uso / razón más común para esto es la prueba: desea poder realizar desde el código (a través de un marco de prueba) todas las interacciones que un usuario invocará a través de la interfaz de usuario.
fuente