Concrete Logo
Hamburger button

Desmistificando o MVC e MVP no Android

  • Blog
  • 8 de Setembro de 2017
Share

Ao longo dos anos tenho trabalhado em diversos projetos e muitas vezes entramos em debates com as equipes para decidir quais seriam as melhores práticas e padrões de projeto para um determinado software. Uma questão que sempre retorna nessas discussões é quais as diferenças entre o Model View Controller (MVC) e o Model View Presenter (MVP)?

Model View Controller (ou MVC)

MVC é um padrão de apresentação da interface do usuário que se concentra em separar a UI (View) de sua camada de negócios (Model). Para isso, o MVC define três componentes:

Diagrama do Model View Controller

– View: apresenta os elementos da UI;

– Controller: responde às ações da UI;

– Model: comportamentos de negócio e gerenciamento de estado.

Na maioria das implementações todos os três componentes podem interagir diretamente uns com os outros, e em algumas implementações o controlador é responsável por determinar qual visualização vai ser exibida.

Para mais detalhes sobre MVC, veja (em inglês) aqui.

Model View Presenter (ou MVP)

MVP também é um padrão de apresentação da interface do usuário e é considerado por muitos uma evolução dos conceitos do MVC. Ele separa as responsabilidades em quatro componentes:

 

Diagrama do Model View Presenter

– View: apresenta os elementos da UI.

– Presenter (Interface): define os eventos que o Presenter poderá responder. Serve unicamente para desacoplar a View do Presenter.

– Presenter: responde às ações da UI controlando a interação entre a View e o Model.

– Model: comportamentos de negócio e gerenciamento de estado.

A interface do Presenter garante que seja fácil realizar testes na View. Em algumas implementações é criado um Supervising Controller, que tem como responsabilidade cuidar da recuperação e persistência do Model.

Diagrama do Model View Presenter com Supervising Controller

Para mais detalhes sobre MVP, veja (em inglês): aqui.

Principais Diferenças

Na prática, não há muitas diferenças entre as duas propostas de apresentação. Ambas se concentram em separar as responsabilidades entre as camadas e incentivar o desacoplamento da UI (View) com a camada de negócios (Model). As principais diferenças entre elas são:

– Padrão MVC: o Controller é baseado em comportamentos e pode ser compartilhado entre múltiplas Views, com menor burocracia e rápido reaproveitamento.

– Padrão MVP: pela grande separação entre a View e o Presenter (graças à interface), garante testes mais fáceis. As interfaces são criadas com relacionamento de 1 para 1, ou seja: para cada View existirá um Presenter.

Conclusão: e no Android, qual usar?

No Android o MVP tem se tornado popular por sua facilidade em desacoplar a View do Presenter. Isso facilita nos Instrumentation Tests com a View e nos <>Unit Tests com o Presenter. Apesar disso, o MVC pode ser muito útil no Android quando se tem o desejo de diminuir a burocracia entre as camadas (retirando uma camada de Interface).

Para mais detalhes sobre Instrumentation Test, veja (em inglês): aqui.

Para mais detalhes sobre Unit Test, veja (em inglês): aqui.

Conforme entendidas as diferenças e realizados meus experimentos, o MVC se mostrou melhor para projetos menores nos quais é possível trabalhar com uma burocracia de comunicação menor, reaproveitar rapidamente os comportamentos dos Controllers entre múltiplas Views e ainda ter uma boa separação para a manutenção. Para projetos maiores o MVP é a solução ideal: seu desacoplamento entre a View e o Presenter, pela utilização de uma interface, ajuda na criação de testes e permite uma evolução estrutural e de apresentação do aplicativo sem traumas maiores.

Espero que este post tenha sido útil e que tenha ajudado a esclarecer as diferenças entre o MVC e MVP. É importante ter em mente que eles não são “balas de prata” e você sempre deve usar como um guia, mas modificar sua implementação de acordo com as suas regras de negócio. Ficou alguma dúvida ou tem algo a dizer? Aproveite os campos abaixo!

Até a próxima!

É Desenvolvedor Mobile e quer fazer parte de um time fantástico? Cadastre seu currículo aqui. 😉