Model-view-presenter

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. Finalmente, a Model se torna estritamente um modelo de domínio.

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 o modelo de dados que será exibido ou alterado na interface do usuário.
  • View é uma interface que exibe de fato os dados (o modelo) e guia os comandos do usuário (eventos) à camada Presenter para atuar sobre os dados.
  • A interface Presenter 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 em 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 e 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] As evoluções e múltiplas variações do padrão MVP, incluindo o relacionamento do MVP com outros padrões de desenho como o MVC, foram analisados detalhadamente em artigos por Martin Fowler[4] e Derek Greer.[5]

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 de implementar manualmente o padrão, um framework de Model-View-Presenter pode ser usado para dar suporte ao padrão MVP de uma forma mais automatizada. A seguir, uma lista desses frameworks sob a plataforma .NET.

Frameworks

editar

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

Ver também

editar

Referências