Se pesquisarmos no Google usando a frase "Qual é a diferença entre o padrão de design MVC, MVP e MVVM", poderemos obter alguns URLs que discutam a diferença entre o padrão de design MVC MVP e MVVM teoricamente como :
MVP
Use em situações em que a ligação através de um datacontext não é possível. O Windows Forms é um exemplo perfeito disso. Para separar a visualização do modelo, é necessário um apresentador. Como a visualização não pode se vincular diretamente ao apresentador, as informações devem ser passadas para a visualização por meio de uma interface (IView).
MVVM
Use em situações em que a ligação por meio de um datacontext é possível. Por quê? As várias interfaces IView para cada visualização são removidas, o que significa menos código a ser mantido. Alguns exemplos em que o MVVM é possível incluem projetos WPF e javascript usando Knockout.
MVC
Use em situações em que a conexão entre a visualização e o restante do programa nem sempre esteja disponível (e você não pode efetivamente empregar MVVM ou MVP). Isso descreve claramente a situação em que uma API da web é separada dos dados enviados para os navegadores do cliente. O ASP.NET MVC da Microsoft é uma ótima ferramenta para gerenciar essas situações e fornece uma estrutura MVC muito clara
Mas não encontrei um único artigo que discuta teoricamente a diferença junto com o código de exemplo.
Seria muito bom se eu receber um artigo que discuta a diferença entre esses três padrões de design (MVC, MVP e MVVM) junto com o código.
Gostaria de obter o código-fonte de três aplicativos CRUD similares , implementados por esses três padrões de design (MVC, MVP e MVVM). Para que eu possa analisar o código e entender como se deve escrever um código para esses três padrões de design (MVC, MVP e MVVM).
Portanto, se existir algum artigo desse tipo que discuta como o código pareceria diferente para esses três padrões de design (MVC, MVP e MVVM), redirecione-me para esse artigo.
Respostas:
Algumas diferenças básicas podem ser escritas em resumo:
MVC:
MVC tradicional é onde existe uma
MVP:
Semelhante ao MVC tradicional, mas o Controller é substituído pelo Presenter. Mas o apresentador, ao contrário do Controller, também é responsável por alterar a exibição. A exibição geralmente não chama o apresentador.
MVVM
A diferença aqui é a presença do View Model. É uma espécie de implementação do Observer Design Pattern, onde as mudanças no modelo também são representadas na exibição pela VM. Por exemplo: se um controle deslizante for alterado, não apenas o modelo será atualizado, mas também os dados que podem ser um texto, exibidos na visualização. Portanto, há uma ligação de dados bidirecional.
fonte
MVC, MVP, MVVM
MVC (antigo)
MVP (mais modular devido ao seu baixo acoplamento. O Presenter é um mediador entre o View e o Model)
MVVM (você já tem ligação bidirecional entre o componente VM e UI, por isso é mais automatizado que o MVP)
Outra imagem:
fonte
Grande explicação do link: http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx
Vamos primeiro olhar para o MVC
A entrada é direcionada primeiro ao Controlador, não à visualização. Essa entrada pode ser proveniente de um usuário interagindo com uma página, mas também pode ser simplesmente inserindo um URL específico em um navegador. Em qualquer um dos casos, é um Controlador com interface para iniciar algumas funcionalidades.
Há um relacionamento muitos-para-um entre o Controller e a View. Isso ocorre porque um único controlador pode selecionar diferentes visualizações a serem renderizadas com base na operação que está sendo executada.
Há uma seta de sentido único do Controller para o View. Isso ocorre porque o View não tem nenhum conhecimento ou referência ao controlador.
O Controller repassa o Modelo, para que haja conhecimento entre a Visualização e o Modelo esperado que está sendo passado para ele, mas não o Controlador que o serve.
MVP - Model View Presenter
Agora vamos ver o padrão MVP. Parece muito semelhante ao MVC, exceto por algumas distinções importantes:
A entrada começa com a exibição, não o apresentador.
Há um mapeamento individual entre a View e o Presenter associado.
A exibição contém uma referência ao apresentador. O Apresentador também está reagindo aos eventos que estão sendo acionados a partir da Visualização, para que esteja ciente da Visualização à qual está associado.
O Apresentador atualiza a Visualização com base nas ações solicitadas que realiza no Modelo, mas a Visualização não reconhece o Modelo.
MVVM - Vista de modelo Vista de modelo
Portanto, com os padrões MVC e MVP à nossa frente, vejamos o padrão MVVM e vejamos quais diferenças ele possui:
A entrada começa com o View, não o View Model.
Enquanto o View mantém uma referência ao View Model, o View Model não possui informações sobre o View. É por isso que é possível ter um mapeamento de um para muitos entre várias vistas e um modelo de vista ... mesmo entre as tecnologias. Por exemplo, uma exibição WPF e uma exibição Silverlight poderiam compartilhar o mesmo modelo de exibição.
fonte
A imagem abaixo é do artigo escrito por Erwin van der Valk:
O artigo explica as diferenças e fornece alguns exemplos de código em C #
fonte