Existem muitas respostas para a pergunta, mas senti que é necessário uma resposta realmente simples comparando claramente as duas. Aqui está a discussão que inventei quando um usuário procura um nome de filme em um aplicativo MVP e MVC:
Usuário: Clique em…
Ver : Quem é esse? [ MVP | MVC ]
Usuário: Acabei de clicar no botão de pesquisa…
Ver : Ok, espere um segundo…. [ MVP | MVC ]
( Exibir chamando o Presenter | Controller …) [ MVP | MVC ]
Ver : Hey Apresentador | Controlador , um usuário acabou de clicar no botão de pesquisa, o que devo fazer? [ MVP | MVC ]
Apresentador | Controlador : Hey View , existe algum termo de pesquisa nessa página? [ MVP | MVC ]
Ver : Sim,… aqui está… “piano” [ MVP | MVC ]
Apresentador : Obrigado Ver , ... enquanto isso eu estou procurando-se o termo de pesquisa sobre o modelo , por favor, mostre a ele / ela uma barra de progresso [ MVP | MVC ]
( Apresentador | O controlador está chamando o modelo …) [ MVP | MVC ]
Apresentador | Controlador : Hey Model , você tem alguma correspondência para este termo de pesquisa ?: "piano" [ MVP | MVC ]
Modelo : Hey Presenter | Controlador , deixe-me verificar… [ MVP | MVC ]
(O modelo está fazendo uma consulta ao banco de dados do filme…) [ MVP | MVC ]
( Depois de um tempo ... )
-------------- É aqui que o MVP e o MVC começam a divergir ---------------
Modelo : Encontrei uma lista para você, apresentador , aqui está em JSON “[{" name ":" Piano Teacher "," year ": 2001}, {" name ":" Piano "," year ": 1993} ] ”[ MVP ]
Modelo : Há algum resultado disponível, Controlador . Eu criei uma variável de campo na minha instância e a preenchi com o resultado. Seu nome é "searchResultsList" [ MVC ]
( Presenter | Controller agradece ao Model e volta à View ) [ MVP | MVC ]
Apresentador : Obrigado pela espera do View , encontrei uma lista de resultados correspondentes e os organizei em um formato apresentável: ["Piano Teacher 2001", "Piano 1993"]. Por favor, mostre-o ao usuário em uma lista vertical. Também oculte a barra de progresso agora [ MVP ]
Controlador : Obrigado por aguardar o View , perguntei ao Model sobre sua consulta de pesquisa. Ele diz que encontrou uma lista de resultados correspondentes e os armazenou em uma variável chamada "searchResultsList" dentro de sua instância. Você pode obtê-lo de lá. Também oculte a barra de progresso agora [ MVC ]
Ver : Muito obrigado Apresentador [ MVP ]
Ver : Obrigado "Controller" [ MVC ] (Agora a View está se questionando: como devo apresentar os resultados que recebo do modelo ao usuário? O ano de produção do filme deve ser o primeiro ou o último ...? estar em uma lista vertical ou horizontal? ...)
Caso você esteja interessado, escrevi uma série de artigos sobre padrões de arquitetura de aplicativos (MVC, MVP, MVVP, arquitetura limpa, ...) acompanhados por um repositório do Github aqui . Mesmo que a amostra seja escrita para o Android, os princípios subjacentes podem ser aplicados a qualquer meio.