Padrão MVC ou MVP – Qual é a diferença?
Ao longo dos anos, orientei muitos desenvolvedores no uso de padrões de design e melhores práticas. Uma pergunta que continua surgindo repetidamente é: Quais são as diferenças entre os padrões MVC (Model View Controller) e MVP (Model View Presenter)?
Ao longo dos anos, orientei muitos desenvolvedores no uso de padrões de design e melhores práticas. Uma pergunta que continua surgindo repetidamente é: Quais são as diferenças entre os padrões MVC (Model View Controller) e MVP (Model View Presenter)?
Surpreendentemente, a resposta é mais complexa do que você suspeitaria. Parte das razões pelas quais acho que muitos desenvolvedores evitam usar qualquer um dos padrões é a confusão sobre as diferenças.
Antes de nos aprofundarmos nas diferenças, vamos examinar como os padrões funcionam e os principais benefícios de usar qualquer um deles. Ambos os padrões (MVC e MVP) têm sido usados há vários anos e abordam um princípio chave de OO, ou seja, a separação de preocupações entre a interface do usuário e as camadas de negócios. Existem várias estruturas usadas hoje com base nesses padrões, incluindo JAVA Struts, ROR, Microsoft Smart Client Software Factory (CAB), Microsoft Web Client Software Factory e a recém-anunciada estrutura ASP.Net MVC.
Model View Controller (MVC) Pattern

O padrão MVC é um padrão de apresentação de interface do usuário que se concentra em separar a interface do usuário (exibição) de sua camada de negócios (modelo). O padrão separa as responsabilidades em três componentes: a exibição é responsável por rasgar elementos da interface do usuário, o controlador é responsável por responder às ações da interface do usuário e o modelo é responsável pelos comportamentos de negócios e pelo gerenciamento de estado. Na maioria das implementações, todos os três componentes podem interagir diretamente entre si e, em algumas implementações, o controlador é responsável por determinar qual exibição exibir (Padrão do Controlador Frontal),
Model View Presenter (MVP) Pattern

O padrão MVP é um padrão de apresentação de interface do usuário baseado nos conceitos do padrão MVC. O padrão separa as responsabilidades em quatro componentes: a exibição é responsável por rasgar elementos da interface do usuário, a interface de exibição é usada para acoplar livremente o apresentador de sua exibição, o apresentador é responsável por interagir entre a exibição/modelo e o modelo é responsável por comportamentos de negócios e gerenciamento de estado. Em algumas implementações, o apresentador interage com uma camada de serviço (controlador) para recuperar/persistir o modelo. A interface de exibição e a camada de serviço são comumente usadas para facilitar a gravação de testes de unidade para o apresentador e o modelo.
Key Benefits
Antes de usar qualquer padrão, um desenvolvedor precisa considerar os prós e contras de usá-lo. Há vários benefícios importantes em usar o padrão MVC ou MVP (veja a lista abaixo). Mas, também há algumas desvantagens a serem consideradas. As maiores desvantagens são adicionar complexidade e curva de aprendizado. Embora os padrões possam não ser apropriados para soluções simples; As soluções avançadas podem se beneficiar muito com o uso do padrão. Tenho minha experiência e vi algumas soluções eliminarem uma grande quantidade de complexidade, mas serem refatoradas para usar qualquer um dos padrões.
- Acoplamento flexível – O apresentador/controlador é um intermediário entre o código da interface do usuário e o modelo. Isso permite que a visualização e o modelo evoluam independentemente um do outro.
- Separação clara de preocupações/responsabilidades
o UI (Formulário ou Página) – Responsável por rasgar elementos da interface do usuário
o Apresentador/controlador – Responsável por reagir a eventos de interface do usuário e interagir com o modelo
o Modelo – Responsável pelos comportamentos de negócios e gestão de estado
- Orientado a testes– Ao isolar cada componente principal (interface do usuário, apresentador/controlador e modelo), é mais fácil escrever testes de unidade. Isso é especialmente verdadeiro ao usar o padrão MVP, que interage apenas com a exibição usando uma interface.
- Reutilização de código– Ao usar uma abordagem de separação de preocupações/design responsável, você aumentará a reutilização de código. Isso é especialmente verdadeiro ao usar um modelo de domínio completo e manter toda a lógica de gerenciamento de negócios/estado onde ela pertence.
- Ocultar acesso a dados– O uso desses padrões força você a colocar o código de acesso a dados onde ele pertence em uma camada de acesso a dados. Há vários outros padrões que normalmente funcionam com o padrão MVP/MVC para acesso a dados. Dois dos mais comuns são repositório e unidade de trabalho. (Consulte Martin Fowler – Padrões de Arquitetura de Aplicativos Corporativos para obter mais detalhes)
- Flexibilidade/Adaptável– Ao isolar a maior parte do seu código nos componentes do apresentador/controlador e do modelo, sua base de código é mais adaptável a alterações. Por exemplo, considere o quanto as tecnologias de interface do usuário e acesso a dados mudaram ao longo dos anos e o número de opções que temos disponíveis hoje. Uma solução projetada adequadamente usando MVC ou MVP pode suportar várias tecnologias de interface do usuário e acesso a dados ao mesmo tempo.
Principais diferenças
Então, quais são realmente as diferenças entre o padrão MVC e MVP. Na verdade, não há muitas diferenças entre eles. Ambos os padrões se concentram em separar a responsabilidade em vários componentes e promovem o acoplamento flexível da interface do usuário (Exibição) da camada de negócios (Modelo). As principais diferenças são como o padrão é implementado e, em alguns cenários avançados, você precisa de apresentadores e controladores.
Aqui estão as principais diferenças entre os padrões:
MVP Pattern
- A vista é acoplada de forma mais flexível ao modelo. O apresentador é responsável por associar o modelo à exibição.
- Mais fácil de testar a unidade porque a interação com a exibição é por meio de uma interface
- Normalmente, visualize o mapa do apresentador um para um. Exibições complexas podem ter vários apresentadores.
MVC Pattern
- Os controladores são baseados em comportamentos e podem ser compartilhados entre exibições
- Pode ser responsável por determinar qual exibição exibir (Padrão do controlador frontal)
Espero que você tenha achado este post interessante e tenha ajudado a esclarecer as diferenças entre o padrão MVC e MVP. Caso contrário, não desanime os padrões são ferramentas poderosas que podem ser difíceis de usar às vezes. Uma coisa a lembrar é que um padrão é um projeto e não uma solução pronta para uso. Os desenvolvedores devem usá-los como um guia e modificar a implementação de acordo com o domínio do problema.
