Model-view-presenter
Predefinição:Cleanup Model–view–presenter (MVP) é uma derivação do padrão de software model-view-controller (MVC), usado também para construir principalmente interfaces gráficas.
Em MVP a camada presenter assume a função de mediadora (executada pelo controller em MVC). Além disso, a view é responsável por manipular os eventos UI (como mouseDown, keyDown, etc.), que era o trabalho da controller. Eventualmente, a model se torna estritamente um modelo de domínio.
Índice |
Descrição do padrão [editar]
MVP é um padrão de desenho de interface de usuário projetado para facilitar os testes unitários automatizados e melhorar a separação de interesses em lógica de apresentação:
- Model é uma interface que define os dados a ser exibidos ou caso contrário, alterados na interface do usuário.
- View é uma interface que exibe os dados (o modelo) e guia os comandos do usuário (eventos) à camada presenter para atuar sobre os dados.
- A interfacepresenter atua sobre a model e a view. Ela recupera os dados dos repositórios (modelo), e os formata para exibi-los na view.
Normalmente, a implementação da view instancia o objeto presenter concretamente, provendo uma referência a si mesmo. O código C# a seguir demonstra um construtor view simples, onde ConcreteDomainPresenter implementa a interface IDomainPresenter:
public class DomainView: IDomainView { private IDomainPresenter domainPresenter; public DomainView() // Construtor { this.domainPresenter = new ConcreteDomainPresenter(this); } }
O grau de lógica permitido na view varia entre implementações diferentes.
Como extremo, a view é completamente passiva, encaminhando todas operações de interação à interface presenter. Dessa forma, quando um usuário dispara um evento na view, ele não faz nada, mas invoca o método da presenter o qual não tem parâmetros e não retorna valor. A interface presenter então recupera os dados da view através dos métodos definidos pela interface view. Finalmente, a presenter então opera na interface model e atualiza a view com os resultados na operação.
Outras versões de model-view-presenter permitem certa liberdade em relação à classe que manipula uma interação, evento ou comando particular. Isto é normalmente mais adequado para arquiteturas baseadas na web, onde a view, a qual executa no browser do cliente, pode ser melhor colocada para manipular interação ou comando.
Do ponto de vista de camada, a classe presenter pode ser considerada como pertencendo à camada de aplicação em um sistema de arquitetura multicamada com camadas comuns, mas ela também pode ser vista como uma camada presenter de si mesma entre a camada de aplicação e a camada de interface do usuário.
História [editar]
O padrão de software model-view-presenter surgiu no início dos anos 90 na Taligent, uma joint venture da Apple, IBM, and HP, e era o modelo de programação básico para desenvolvimento de aplicação no ambiente comum baseado em C++ na Taligent. O padrão foi depois migrado pela Taligent para Java e popularizado em um artigo pela Taligent CTO Mike Potel.1 . Depois a falência da Taligent em 1997, Andy Bower e Blair McGlashan do Dolphin Smalltalk adaptaram o padrão MVP para formar a base para seu framework de interface de usuário Smalltalk.2 Em 2006, a Microsoft começou a incorporar o MVP em suas documentações e exemplos para a programação de interface de usuário no .NET framework.3 A evoluções e múltiplas variações do padrão MVP, incluindo to relacionamento do MVP com outros padrões de desenho como o MCV, foram analisados em detalhe no artigo de Martin Fowler4 e outro por Derek Greer5
Implementação em .NET [editar]
O ambiente .NET suporta o padrão MVP como qualquer outro ambiente de desenvolvimento. A mesma classe model e presenter pode ser usada para suportar múltiplas interfaces, como uma aplicação Web ASP.NET, uma aplicação Windows Forms, ou uma aplicação Silverlight. A camada presenter obtém e envia informação de/para a view através de uma interface que pode ser acessada pelo componente de interface (view).
Além disso, para implementar manualmente o padrão, o framework model-view-presenter pode ser usado para suportar o padrão MVP em uma forma autorizada. Abaixo está uma lista de tais frameworks sob a plataforma .NET.
Frameworks [editar]
- Claymore
- MVC# Framework
- Web Client Software Factory
- Evolution.Net MVP Framework
- ASP.NET Web Forms Model-View-Presenter (MVP)
- NETTE Framework
- Nucleo.NET
Implementação em Java [editar]
Em uma aplicação Java (AWT/Swing/SWT), o padrão MVP pode ser usado permitindo que uma classe de interface de usuário implemente uma interface view.
A mesma abordagem pode ser usada para aplicações Java baseadas na web desde que frameworks web Java baseados em componentes permitem desenvolvimento lógico do lado cliente usando a mesma abordagem de componente como clientes familiares.
Implementar MVP no Google Web Toolkit exige apenas que algum componente implemente a interface view. A mesma abordagem é possível usando o frameword para web Echo2.
MVP pode ser implementado em aplicações Java SE (Swing and AWT) usando o framework Biscotti.
Frameworks [editar]
Veja também [editar]
- Presenter First
- Model–view–controller
- Common layers in an information system logical architecture
- Model View ViewModel
Referências
- ↑ "MVP: Model-View-Presenter. The Taligent Programming Model for C++ and Java." Mike Potel
- ↑ "Twisting the Triad. The evolution of the Dolphin Smalltalk MVP application framework." Andy Bower, Blair McGlashan
- ↑ "Microsoft patterns and practices"
- ↑ "GUI Architectures" Martin Fowler
- ↑ "Interactive Application Architecture Patterns" Derek Greer
- ↑ Large scale application development and MVP from GWT project's web site. It explains how to use MVP within GWT.