De que se trata o artigo
Este artigo trata sobre o pattern Model View Presenter, que apesar de não ser tão popular quanto o MVC (Model View Controller), pode ser implementado para prover uma separação da camada de visualização das outras camadas de sua aplicação.
Em que situação o tema é útil
A implementação do MVP pode ser útil em situações onde você deseja ter uma clara separação das camadas lógicas do teu sistema, separando a visualização das outras camadas. Além disso, este padrão pode ajudar a aumentar o reuso do código, quando existe a necessidade de implementação de um mesmo recurso em tecnologias diferentes (Windows Forms, Web Forms etc..), sem contar que dá mais liberdade para as equipes de designer e desenvolvimento trabalharem de forma mais independente.
MVP - Model View Presenter
Neste artigo exploraremos mais a fundo os conceitos por traz do MVP, suas características e suas formas de implementação, através das abordagens Passive View e Supervising Presenter. Faremos ainda um exemplo de implementação do MVP, simulando uma tela de cadastro de usuários utilizando Windows Forms e Web Forms com o intuito de deixar claro alguns dos benefícios do uso do MVP.
Diariamente no desenvolvimento de software nos deparamos com problemas corriqueiros em diversos projetos diferentes. Isso acontece nas equipes de desenvolvimento do mundo inteiro, e de todas as linguagens e tecnologias. Foi baseado na repetição destes problemas, nos mais variados cenários, que foram criados os Design Patterns. Os padrões de projeto são soluções comuns para problemas corriqueiros inerentes ao desenvolvimento de softwares orientados a objetos.
Os padrões de projeto são independentes de tecnologia e visam fornecer um caminho para solução de um problema, sem se prender à tecnologia ou linguagem que você está utilizando. Sendo assim, podemos implementar o mesmo padrão de projeto em .Net, Java, Delphi, em uma aplicação Web, desktop ou Mobile, respeitando apenas as características de cada linguagem e ambiente. Os padrões de projetos se dividem em três tipos:
• Estruturais – Padrões que visam descrever como classes e objetos devem ser combinados para formar estruturas maiores. Ex.: Composite.
• Criacionais – Padrões que visam resolver problemas inerentes à criação de objetos. Ex.: Singleton
• Comportamentais – Padrões que visam descrever como os objetos devem se comportar e relacionar uns com os outros. Ex.: Observer
Além dos padrões de projeto, nós temos ainda o conceito de Architectutral Patterns (Padrões de arquitetura). Este conceito é parecido com o de padrões de projeto, sendo mais amplo. Enquanto que um padrão de projeto é aplicado dentro de um contexto específico dentro de uma aplicação, os padrões de arquitetura se referem a como a aplicação em si irá se comportar e quais serão os padrões de comunicação da mesma, tanto entre suas camadas físicas e lógicas, quanto para com outras aplicações.
Existe certa controvérsia na comunidade com relação à classificação do MVP (Model View Presenter). Esta mesma controvérsia acontece com o MVC (Model View Controller). Alguns classificam como padrão de projeto e outros classificam como padrão de arquitetura. Acreditamos que é um padrão de arquitetura, que visa estabelecer a separação e uma forma de comunicação entre as camadas lógicas da sua aplicação,mas não seria de tudo errado em considerar como um padrão de projeto, se olharmos na ótica da descrição da solução de um problema.
MVP – Model View Presenter
O MVP é um padrão de arquitetura que visa a separação das camadas lógicas da aplicação em três elementos:
• Model – Camada de dados, com suas classes de domínio e regras de negócio;
• View – Camada de visualização, contendo todos os elementos de interface gráfica e toda a interação com o usuário final;
• Presenter – Camada de apresentação de dados, responsável pela comunicação da view com os comportamentos e dados do model.
Com a adoção do MVP, conseguimos resolver dois problemas comuns na camada de visualização:
• Testabilidade – Automatizar testes em rotinas que dependem de operações da interface gráfica é muito mais complexo do que testar uma classe C#. Cada tecnologia de apresentação possui suas particularidades, os eventos foram preparados para serem disparados por ações do usuário e normalmente acaba-se por inserir complexidade demais na camada de visualização, tornando a automação dos testes uma tarefa mais complexa. Com o uso do MVP, nós conseguimos obter um nível maior de testabilidade no projeto, pois conseguimos abstrair a tecnologia de visualização dos testes. Com um simples mock (Nota do DevMan 1), nós conseguimos testar nosso presenter e suas operações, independentemente da tecnologia de visualização que estiver sendo usada.
• Portabilidade – Existem cenários em que precisamos portar determinadas telas e recursos em mais de uma tecnologia, por exemplo, Web e Desktop. Nestes casos, sem a adoção de um pattern como o MVP, normalmente pode-se ter repetição de código e um menor nível de reuso.
Objetos mocks são objetos que simulam um determinado comportamento de um objeto, utilizados em testes unitários. No caso do MVP, poderíamos cria um mock da view, implementando a interface da mesma, para testarmos nosso presenter sem depender da implementação concreta da view (Windows forms, web forms etc...). Dessa forma, deixamos nosso teste mais independente da view, onde é sempre mais difícil se automatizar testes.
Teste unitário é uma prática de testes onde se testa cada uma das menores unidades da sua aplicação, ou seja, os métodos. Para cada método, teríamos um código para testar o mesmo, simulando as possíveis entradas e validando as saídas esperadas. A ideia do teste unitário é garantir que cada parte do seu código, faça o seu papel, evitando resultados inesperados em tempo de execução.
O MVP prevê a criação de uma interface entre o presenter e a view, abstraindo o presenter da tecnologia de visualização empregada no projeto. Sendo assim, todas as views concretas (que podem estar nas mais diversas tecnologias), tem que implementar uma determinada interface, que contém os comportamentos que o presenter precisa para se comunicar com as views.
Existem dois tipos de implementação do MVP, sendo eles:
• Passive View – Nesta implementação, o presenter é o responsável pelo binding dos dados do modelo na view e vice versa, deixando a view mais independente do modelo e com o código mais simples, como mostra a Figura 1.
Figura 1. MVP – Passive View
• Supervising Presenter – Nesta implementação, a própria view é responsável pelo binding dos dados do modelo, fazendo com que ela tenha um pouco mais de código, como na ...
Confira outros conteúdos:
Teste unitário com NUnit
Como migrar projetos do ASP.NET MVC...
Crie relatórios com o Stimulsoft...
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.