Desmistificando o MVC e MVP no Android

Marcello Galhardo
Feb 26, 2016 · 3 min read

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:

Image for post
Image for post
Diagrama do Model View Controller.

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:

Image for post
Image for post
Diagrama do Model View Presenter.

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.

Image for post
Image for post
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. Ambos 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 eles são:

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 Test com a View e nos Unit Test 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 entendido as diferenças e realizado meus experimentos, o MVC se mostrou melhor para projetos menores onde é possível trabalhar com uma burocracia de comunicação menor, reaproveitar rápidamente os comportamentos dos Controllers entre múltiplas Views e ainda ter uma boa separação para a manutenção. Para projetos maiores o MVP se mostrou 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 artigo 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 pratas” e você sempre deve usa-los como um guia, mas modificar sua implementação de acordo com as suas regras de negócio.

Image for post
Image for post
Até a próxima!

Android Dev BR

Artigos em português sobre Android, curados pela comunidade…

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store