Qual é a diferença entre o Controller no MVC e o ViewModel no MVVM?

21

Não vejo claramente a diferença entre MVC e MVVM. Eu sinto que o comando em um ViewModel é exatamente como o método Action em um Controller. E o Controller e o ViewModel notificarão o View para se atualizar depois de modificar o estado do Modelo por meio da Ligação de Dados. Qual é a principal diferença entre os dois padrões?

TomCaps
fonte

Respostas:

25

O controlador e o ViewModel diferem de várias maneiras.

No MVC, o Controlador conhece a visualização, pode alterar a Visualização. Ele também conhece o Modelo e pode chamá-lo. No MVVM, um ViewModel é uma representação abstrata da View e não conhece a interface do usuário concreta; envolve o Model de uma maneira que possa ser exibida conforme desejado.

No MVC clássico, um controlador é apenas uma estratégia do View para interagir com o Model. De fato, às vezes um Controlador nem é necessário. No MVVM, você não precisa dele, pois pode ter diferentes modelos de exibição para a mesma exibição, se precisar de comportamentos diferentes. No MVC, você pode ter, por exemplo, um ReadOnlyController ou AdminController para se comunicar com o modelo. No MVVM, você pode ter apenas dois ViewModels e escolher o que precisa para o View.

Mas eles têm algumas semelhanças. Nos dois padrões, a Visão é um observador . No MVC clássico, a visualização é um observador do modelo, no MVVM é um observador do ViewModel.

Ambos os padrões destinam-se a separar as preocupações. O MVVM visa principalmente fornecer uma abstração do View, completamente independente da tecnologia da interface do usuário em uso. MVC não vai tão longe. Seu foco principal é a separação de preocupações, para que você não coloque a lógica de negócios (o Modelo) em exibição.

Você também pode achar útil esta resposta minha para uma pergunta semelhante.

Por fim, devo dizer que ambos os padrões pertencem à mesma família. MVP, do qual o MVVM é descendente, é irmão do MVC. Se você quiser saber mais, siga este link para o site de Martin Fowler , ele explica tudo em detalhes.

Falcão
fonte
você não acha que essas arquiteturas de visualização de modelo são melhor compreendidas pelas pessoas que as implementam? Eu acredito que é uma questão de escolha para o desenvolvedor. Pode-se escolher MVC ou MVVM, dependendo se ele deseja uma abstração total da exibição com um pouco de sobrecarga (no caso do MVVM).
Pankaj Upadhyay 31/08
@Pankaj Upadhyay: Qual deles você deve usar depende de seus requisitos e escolha de tecnologia e também das idiossincrasias de sua plataforma.
Falcon
Acredito que a arquitetura MVC seja boa o suficiente para qualquer coisa, mas isso pode ser porque eu não enfrentei um problema que exigisse particularmente o MVVM. IMO, você certamente precisa ter algum controle sobre a visão, porque tornando-se absolutamente solta irá melhorar mais erros em futuras atualizações
Pankaj Upadhyay
1
@Pankaj Upadhyay: Se você deseja usar a mesma lógica para várias tecnologias de interface do usuário, o MVP é superior. Não acho que você precise necessariamente de algum controle sobre a vista. Pode ser totalmente independente e você também pode testar os ViewModels - se não melhor. A melhor separação também beneficia os designers, pois o trabalho no projeto pode ser particionado melhor.
Falcon