Model-view-presenter

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Ambox rewrite.svg
Esta página precisa ser reciclada de acordo com o livro de estilo.
Sinta-se livre para editá-la para que esta possa atingir um nível de qualidade superior.
Editor: considere colocar o mês e o ano da marcação. Isso pode ser feito automaticamente, substituindo esta predefinição por {{subst:rec}}

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.

Descrição do padrão[editar | editar código-fonte]

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 | editar código-fonte]

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 Fowler[4] e outro por Derek Greer[5]

Implementação em .NET[editar | editar código-fonte]

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 | editar código-fonte]

Implementação em Java[editar | editar código-fonte]

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 | editar código-fonte]

Veja também[editar | editar código-fonte]

Referências