Existe alguma referência fácil e passo a passo ao MVVM?
Sim existe. Dê uma olhada no aqui.
O MVVM é um superconjunto ou subconjunto do MVC?
O MVVM pertence à família MVC, portanto, se você pode dizer isso, é um subconjunto. É uma variante para separar a interface do usuário da lógica de negócios abaixo. Eu o descreveria como um irmão do MVC. Desde os primeiros dias da OOP, as pessoas têm procurado maneiras de separar a interface do usuário de sua lógica. MVC foi o primeiro arquétipo que evoluiu. É bem simples, embora a maioria das pessoas não acerte. A visualização é apenas um observador do modelo e o chama quando necessário. O controlador é apenas uma estratégia para a visualização se comunicar com o modelo, por exemplo, quando você precisa de um comportamento intercambiável (por exemplo, ReadonlyController, AdminController). O MVC é muito bem-sucedido e é realmente uma boa prática aplicá-lo.
MVVM é um tipo especializado de padrão MVP, conforme descrito por Martin Fowler . O MVP tenta manter a visualização o mais burra possível (enquanto ainda recebe informações do usuário etc.), melhorando assim a testabilidade. Ele visa uma abstração da visão e da lógica de interação que deve ser colocada no apresentador. O apresentador se comunica apenas com o modelo / lógica de negócios e atualiza a Visualização. Martin Fowler descreve o MVVM praticamente em seu Modelo de modelo de apresentação.
A vista é completamente abstraída em um ViewModel. Quando as View
necessidades de uma propriedade, as ViewModel
necessidades de tê-lo também. Ele (o ViewModel) deve ser completamente independente da tecnologia de interface do usuário subjacente, uma abstração. Para se comunicar entre o View e o ViewModel, é necessário usar um padrão de sincronização (ou seja, Observer). Isso não é fácil de ser realizado em um ambiente da Web sem estado. O MVVM difere do MVP, pois o View não se liga mais ao modelo / lógica de negócios, mas ao ViewModel.
Qual padrão é moderno e qual devo escolher para as versões Windows e Web do meu aplicativo?
O modelo de apresentação (tipo MVVM) em teoria deve ser completamente independente da tecnologia da interface do usuário em uso. No entanto, o aspecto da sincronização precisa ser coberto. Isso pode ser feito facilmente vinculando-se a Comandos e propriedades com o WPF, onde a cola de sincronização já está presente. Com o ASP.NET, essa é uma história diferente. No entanto, há um artigo no CodeProject que usou o Modelo de modelo de apresentação com todas as tecnologias de interface do usuário do Windows. Dar uma olhada.