Ir para o conteúdo
Padrão MVC ou MVP – Qual é a diferença?

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)?

5min read

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

 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

 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.

Solicite uma demonstração