Não podemos dizer que o padrão MVP (Model-View-Presenter) é recente, mesmo por que foi proposto no início dos anos noventa. Mas ainda assim parece novo para muitos desenvolvedores, que ainda não se familiarizaram com ele. O padrão MVP é derivado do conhecido padrão MVC, onde os componentes Model, View e Controller se comunicam. Em uma breve descrição do padrão MVC podemos dizer que a View representa a visualização propriamente dita, sendo representada por um Web Form, Windows Form ou outra forma de interface com o usuário. O Model é responsável por tratar os dados e os comportamentos da aplicação, e o Controller contém a lógica necessária para conectar o Model à View, convertendo as ações da View em eventos que o Model é capaz de tratar. O motivo pela qual descrevi brevemente o padrão MVC, é que ele inspirou e serve de base para o padrão MVP, onde o Presenter assume o lugar do Controller. Mas por qual o objetivo ? No padrão MVP a View não se comunica com o Model, chamamos esta abordagem de Passive View. Neste caso, como o nome sugere, a View é completamente passiva e deixa para o Presenter o papel de tratar suas ações e dizer quando e como ela deve ser atualizada. A organização proposta pela abordagem Passive View é excelente, mas implica em maior complexidade para tarefas simples como preencher controles (Data Binding). E é por este motivo que existe ainda uma segunda abordagem no padrão MVP, o Supervising Controller, onde a única diferença é permitir que a View acesse o Model, mas somente para realizar Data Bindings. Diagrama das duas abordagens distintas: Explicado o funcionamento do padrão, gostaria de demonstrá-lo na prática (abordagem Passive View), utilizando um simples exemplo em ASP.NET. Começaremos pela View, um simples WebForm contendo um TextBox para informarmos o valor, um botão para disparar a ação e uma Label para exibir o resultado:
01.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SampleView.aspx.cs" Inherits="MVPSample._SampleView" %>
02.
03.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
04.
05.
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
06.
head
runat
"server"
07.
title
></
08.
</
09.
body
10.
form
id
"frm"
11.
div
12.
Value: <
asp:TextBox
ID
"txtValue"
Text
"8"
/><
br
/>
13.
asp:Button
"btnGetNamedValue"
"Get Named Value"
14.
onclick
"btnGetNamedValue_Click"
15.
asp:Label
"lblNamedValue"
16.
17.
18.
19.
1.
namespace
MVPSample.Interface
2.
{
3.
public
interface
ISampleView
4.
5.
void
ShowNamedValue(
string
namedValue);
6.
}
7.
using
System;
System.Web.UI;
MVPSample.Interface;
MVPSample.Presenter;
MVPSample
partial
class
_SampleView : Page, ISampleView
private
SamplePresenter _presenter;
protected
override
OnInit(EventArgs e)
this
._presenter =
new
SamplePresenter(
);
base
.OnInit(e);
namedValue)
20.
21.
lblNamedValue.Text = namedValue;
22.
23.
24.
btnGetNamedValue_Click(
object
sender, EventArgs e)
25.
26.
int
value = Convert.ToInt32(txtValue.Text);
27.
28.
._presenter.GetNamedValue(value);
29.
30.
31.
MVPSample.Model
SampleModel
GetNamedValue(
value)
if
(value <= 5)
return
"Poor"
;
else
(value > 5 && value <= 10)
"Avarage"
(value > 10)
"Great!"
"Ivalid value!"
MVPSample.Model;
MVPSample.Presenter
SamplePresenter
ISampleView _view;
SamplePresenter(ISampleView view)
._view = view;
namedValue =
SampleModel().GetNamedValue(value);
._view.ShowNamedValue(namedValue);
Isso ai.. muito bom o post.
Realmente não estou familiarizado com o assunto, conheço o MVC mas ainda não tinha ouvido falar do MVP. :)
Muito bem explicado, gostei.
Vou tentar desenvolver atraves deste exemplos
Parabens, pelo post!
Muito boa explicação, transmitiu a ideia de forma objetiva e de fácil entendimento!
ótima documentação !!!!!!!!!!!!!!!!!!!!!
Muito TOP