Essencialmente, Model e View Model são classes simples com atributos.
O objetivo principal dessas classes é descrever (para "Modelar") um objeto para seus respectivos públicos que são respectivamente o controlador e a visualização.
Então você está completamente certo quando diz
No meu entendimento, é uma espécie de Model que tem um propósito específico de interagir com a View
Portanto, embora as classes de Model sejam efetivamente Entidades de Domínio com as quais seu aplicativo interage, View Models são classes simples com as quais suas views interagem.
Espero que ajude :)
Atualização :
A Microsoft desenvolveu uma versão especializada do Presentation Pattern por Martin Fowler amplamente baseada no Model-View-Controller e chamou-o de Model-View-ViewModel (MVVM) para aplicativo PF. Esse padrão é direcionado a plataformas de desenvolvimento de UI modernas, nas quais os desenvolvedores de UI possuem diferentes requisitos baseados mais na lógica de negócios do que os desenvolvedores tradicionais. Dê uma olhada aqui para um pouco de teoria
Em termos mais simples, gosto de pensar no seguinte:
Modelo: estritamente parece e se parece com seu modelo de dados. Para todos os efeitos, é apenas uma representação de classe de seu modelo de dados. Ele não tem conhecimento de sua Visualização ou de quaisquer elementos em sua Visualização. Dito isso, ele não deve conter nenhum decorador de atributo (ou seja, necessário, comprimento, etc.) que você usaria para sua visualização.
View Model: Serve como um aglutinante de dados entre sua View e seu Model e, em muitos casos, também é um wrapper para seu Model. Ele seria tornado inútil sem o View, portanto, normalmente não é reutilizável em vários Views e Controllers como um Model padrão é.
Por exemplo, seu modelo pode ter as seguintes propriedades, que são representações diretas de sua fonte de dados:
Agora, como seu modelo de visualização está vinculado à sua visualização, ele pode ter a seguinte propriedade - que concatena os campos FirstName e LastName do modelo juntos como uma string:
fonte
Achei este artigo um recurso muito útil para entender como o "Modelo de Domínio" e o "Modelo de Visualização" interagem em um aplicativo MVC, principalmente no que diz respeito à vinculação. O melhor de tudo inclui exemplos em vez de descrições abstratas.
"Desde que o MVC foi lançado, observei muita confusão sobre a melhor forma de construir modelos de visualização. Às vezes, essa confusão não é sem um bom motivo, pois não parece haver uma tonelada de informações sobre as recomendações de práticas recomendadas. Além disso, não há uma solução “tamanho único” que atua como a bala de prata. Neste post, descreverei alguns dos principais padrões que surgiram e os prós / contras de cada um. É importante observar que muitos desses padrões surgiram de pessoas que resolvem problemas do mundo real. "
http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx
fonte
WikiPedia tem uma descrição mais completa de Model vs. ModelView do que você obterá em uma resposta SO: http://en.wikipedia.org/wiki/Model_View_ViewModel
Eu cito:
Modelo : como no padrão MVC clássico, o modelo se refere a (a) um modelo de objeto que representa o conteúdo de estado real (uma abordagem orientada a objetos), ou (b) a camada de acesso a dados que representa esse conteúdo (uma abordagem centrada).
Visualização : como no padrão MVC clássico, a visualização se refere a todos os elementos exibidos pela GUI, como botões, janelas, gráficos e outros controles.
ViewModel : o ViewModel é um “Model of the View”, o que significa que é uma abstração da View que também serve na vinculação de dados entre a View e o Model. Ele pode ser visto como um aspecto especializado do que seria um Controlador (no padrão MVC) que atua como um aglutinador / conversor de dados que transforma informações de Modelo em informações de Visão e passa comandos de Visão para o Modelo. O ViewModel expõe propriedades públicas, comandos e abstrações. O ViewModel foi comparado a um estado conceitual dos dados em oposição ao estado real dos dados no Model.
fonte
Existe uma noção de ViewModel, mas geralmente não é associado ao Asp.net MVC. MVC usa o padrão Model View Controller, onde o controlador lida com interações, constrói dados do Model e então passa esses dados para a View para exibição.
ViewModels (e o padrão Model View ViewModel) é mais geralmente associado ao Silverlight e WPF. O Xaml é um pouco diferente, pois as visualizações podem fazer vinculação bidirecional aos ViewModels, portanto, a tecnologia é um pouco diferente. Por exemplo, se você vincular uma caixa de texto a um campo, conforme você digita nessa caixa de texto, o valor do campo é atualizado dinamicamente. Esse tipo de interação não é realmente possível em páginas da web, pois as páginas da web não têm estado.
A semelhança entre os dois padrões é que ambos estão tentando separar a lógica da tela. O uso / motivo mais comum para isso é o teste: você deseja ser capaz de executar a partir do código (por meio de uma estrutura de teste) todas as interações que um usuário invocará por meio da interface do usuário.
fonte