![]() |
Neste artigo vamos rever o padrão MVP e mostrar uma implementação prática deste padrão usando a linguagem C#. |
Para relembrar vejamos o que é o padrão MVP.
O padrão
Model View Presenter (MVP) é um padrão
arquitetural de interface do usuário projetado para facilitar os testes
unitários e melhorar a separação de interesses na lógica de apresentação:
- O Model - É uma interface que define os
dados a serem exibidos ou usados na interface do usuário;
- A View - É uma interface passiva que
exibe dados (do modelo) e roteia os comandos do usuário (eventos)
para o Presenter (apresentador) para agir sobre esses dados;
- O Presenter - Age sobre o
Model e View. Ele recupera dados de
repositórios (o modelo) e os formata para exibição na View;
Nota: O termo interface está sendo usado aqui em um sentido genérico; um ponto em que dois sistemas, se encontram e interagem.
Abaixo temos uma representação gráfica do padrão MVP :
Neste artigo iremos abordar o MVP seguindo o padrão Passive View que segue os seguintes fundamentos:
Vamos agora ao exemplo prático.
Recursos usados:
Criando o projeto ASP .NET (Web Forms)
Vamos usar um exemplo clássico bem simples de forma a facilitar o entendimento da aplicação do padrão.
Abra o VS 2017 e crie um projeto Web do tipo ASP .NET Web Application .NET Framework) chamado DemoMVP.
A seguir selecione o template Empty e marque Web Forms e clique em OK.
Vamos iniciar definindo a interface ICirculoModel que vai fazer parte do nosso Model:
public interface ICirculoModel
{
double getArea(double raio);
}
|
Na interface definimos a assinatura do método para calcular a área do círculo.
A seguir vamos criar uma classe CirculoModel que implementa essa interface e calcula o valor da área do circulo. Essa classe será o nosso Model.
using System;
namespace DemoMVP
{
public class CirculoModel : ICirculoModel
{
public CirculoModel()
{ }
public double getArea(double raio)
{
return Math.PI * raio * raio
}
}
}
|
Precisamos agora definir a nossa View que representa a interface com o usuário. Nossa interface será bem simples e vai apenas exibir uma caixa de texto para ser informado o raio, um botão de comando, e uma Label para exibir o resultado.
Assim vamos definir a interface IView com duas propriedades conforme abaixo:
public interface IView
{
string txtRaio { get; set;}
string txtArea { get; set;}
}
|
Agora vamos incluir um WebForm no projeto chamado Index.aspx que será a nossa interface com o usuário.
No menu Project-> Add New Item escolha Web Form e informe o nome Index.aspx e clique em Add.
A seguir inclua o código abaixo neste web form:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="DemoMVP.Index" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>DemoMVP</title>
</head>
<body>
<form id="form1" runat="server">
<h2>Macoratti.net </h2>
<hr />
<div>
<table>
<tr>
<th colspan="2">Calcular a Área do Círculo</th>
</tr>
<tr>
<td>Informe o raio</td>
<td><asp:TextBox ID="txtRaio" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td>Resultado:</td>
<td><asp:Label ID="lblArea" runat="server" ForeColor="red"></asp:Label></td>
</tr>
<tr align="right">
<td colspan="2"><asp:Button ID="btnResultado" runat="server" Text="Valor da Área"
OnClick="btnResultado_Click" /></td>
</tr>
</table>
</div>
</form>
</body>
</html>
|
Agora precisamos criar nosso Presenter que vai coletar as informações que o usuário informar na View Index.aspx e passar para o Model.
Crie uma classe chamada CirculoPresenter com o código a seguir:
using System;
namespace DemoMVP
{
public class CirculoPresenter
{
IView mview;
public CirculoPresenter(IView view)
{
mview = view;
}
public double CalcularAreaCirculo()
{
CirculoModel model = new CirculoModel();
mview.TxtArea = model.GetArea(double.Parse(mview.TxtRaio)).ToString();
return Convert.ToDouble(mview.TxtArea);
}
}
}
|
No Presenter temos o método CalcularAreaCirculo() que cria uma instância do Model e usa o método GetArea() passando os valores a partir da View e retornando o valor da área.
Finalmente para realizar a comunicação com o Model via Presenter vamos definir o código abaixo no arquivo code-behind Index.aspx.cs :
using System;
namespace DemoMVP
{
public partial class Index : System.Web.UI.Page , IView
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnResultado_Click(object sender, EventArgs e)
{
CirculoPresenter presenter = new CirculoPresenter(this);
presenter.CalcularAreaCirculo();
}
public string TxtRaio
{
get { return txtRaio.Text; }
set { txtRaio.Text = value; }
}
public string TxtArea
{
get { return lblArea.Text; }
set { lblArea.Text = value; }
}
}
}
|
Neste código definimos as duas propriedades da View : TxtRaio e TxtArea e a seguir no evento Click do botão de comando criamos uma instância do Presenter e calculamos a área.
Note que a nossa página Index.aspx herda de IView.
Executando o projeto iremos obter o seguinte resultado:
![]() |
Então, agora deu para entender como funciona o MVP ?
Pegue
o projeto completo aqui :
DemoMVP.zip
João 14:21
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
C# - Novidades da versão 7.0 - Macoratti
C# - O tipo Dynamic - Macoratti.net
Padrões de Projeto - Macoratti
NET - Usando padrões de projeto e princípios OOP na ... - Macoratti
NET - Você já esta usando Padrões de Projeto (mesmo ... - Macoratti
NET - O padrão de projeto Decorator - Macoratti
NET - O padrão de projeto Command - Macoratti
O padrão Strategy : utilização - Macoratti
Design Patterns - o padrão Factory - Macoratti