Inżynieria Oprogramowania
MVP
Wydział Mechaniczny Politechniki Krakowskiej
Instytut Informatyki Stosowanej
Rok Akademicki 2011/2012, Grupa 13K3
Rafał Polak 13k3
29-01-2011
Sprawozdanie z Laboratorium Komputerowego
Model View Presenter
1. Ogólne informacje
Wzorzec Projektowy
– to ogólne rozwiązanie często spotykanego problemu w
specyficznym przypadku. Wzorce powstają z doświadczenia ekspertów w danej
dziedzinie.
MVP
– jest to pochodna MVC (Model – View – Controler) wzorca oprogramowania.
Podobnie jak MVC wykorzystywany jest do tworzenia interfejsów użytkownika, aby
oddzielić warstwę aplikacji od warstwy komunikacji z użytkownikiem.
Model ten oddziela od siebie warstwy aplikacji tworząc ją przejrzystą i hierarchiczną
jednocześnie przyporządkowując warstwom odpowiednie zadania i polecenia
podczas pracy programu.
Warstwa Prezentacji odpowiada za funkcjonalności pomiędzy warstwą Modelem a
Widokiem. W modelu MVC odpowiada za to Kontroler. Widok odpowiedzialny jest za
obsługę zdarzeń interfejsu użytkownika UI, natomiast ostatnia warstwa odpowiada
za opisanie atrybutów, podmiotów i ról wewnątrz aplikacji, dzięki czemu zwiększa się
inteligencja programu.
2. Cel MVP
MVP jest wzorcem projektowym zaprojektowanym w celu ułatwienia automatycznego
testowania urządzeń i oprogramowania na nich zainstalowanych.
Model definiuje dane które mają być wyświetlane lub w jakiś inny sposób mogą wpłynąć na
interfejs użytkownika.
Widok odpowiada głównie za wyświetlanie danych z powyższego Modelu oraz bada czas i trasy
powtórzeń.
Prezenter działa z połączenia tych dwóch klas i jednocześnie podbiera dane z repozytoriów dla
modelu oraz formaty do wyświetlenia w widoku.
Widok jest elementem pasywnym, który przekazuje wszystkie informacje do prezentera.
Prezenter gdy zostaje wywołany łączy się z Modelem i Widokiem pobierając od niego dane za
pomocą metod. Następnie dopiero aktualizuje on model. Różne wersje MVP umożliwiają swobodę w
odniesieniu do odwołań interakcji, zdarzeń i poleceń.
3. Cel Ćwiczenia
Na ćwiczeniach stworzyliśmy aplikację opartą o model MVP, aby zobaczyć działanie modelu w
praktyce. Niezbędne było utworzenie projektu składającego się z trzech wartsw Modelu,
Prezentera i Widoku.
Interfejs Modelu został zdefiniowany:
namespace
Model
{
public
interface
IModel
{
Element
getElement();
void
setElement(
Element
element);
}
}
Dołączyliśmy także klasę zdefiniowaną w interfejsie Modelu tworzącą interfejs oraz klasę
ELEMENT zawierającą element będący testowymi danymi.
namespace
Model
{
public
class
Model
:
IModel
{
private
Element
element;
public
Element
getElement()
{
if
(element ==
null
)
element =
new
Element
();
return
element;
}
public
void
setElement(
Element
element)
{
this
.element = element;
}
}
}
namespace
Model
{
public
class
Element
{
public
string
Imie {
get
;
set
; }
public
string
Nazwisko {
get
;
set
; }
private
IList
<
string
> przedmioty;
public
IList
<
string
> Przedmioty {
get
{
return
this
.przedmioty; } }
internal
Element()
{
Imie =
"Rafał"
;
Nazwisko =
"Pola"
;
przedmioty =
new
List
<
string
>();
przedmioty.Add(
"Komunikacja Człowiek Komputer"
);
przedmioty.Add(
"Inzynieria Oprogramowania"
);
przedmioty.Add(
"Programowanie Obiektowe"
);
}
}
}
Warstwa Prezentacji łącząca dwie skrajne warstwy posiada zdefiniowany interfejs oraz klasę
odwołującą i komunikującą się z Modelem i Widokiem:
namespace
Prezenter
{
public
interface
IPrezenter
{
string
Imie {
get
;
set
; }
string
Nazwisko {
get
;
set
; }
IList
<
string
> Przedmioty {
get
; }
void
saveDate();
}
}
namespace
Prezenter
{
public
class
Prezenter
:
IPrezenter
{
Model.
IModel
model;
Model.
Element
element;
View.
IView
view;
public
Prezenter(View.
IView
view)
{
this
.view = view;
model =
new
Model.
Model
();
element = model.getElement();
view.Imie = Imie;
view.Nazwisko = Nazwisko;
view.Przedmioty = Przedmioty;
}
public
string
Imie
{
get
{
return
element.Imie;
}
set
{
element.Imie =
value
;
}
}
public
string
Nazwisko
{
get
{
return
element.Nazwisko;
}
set
{
element.Nazwisko =
value
;
}
}
public
IList
<
string
> Przedmioty
{
get
{
return
element.Przedmioty; }
}
public
void
saveDate()
{
this
.element.Imie =
this
.view.Imie;
this
.element.Nazwisko =
this
.view.Nazwisko;
model.setElement(
this
.element);
}
}
}
Interfejs widoku został zdefiniowany w tej samej warstwie prezentacji.:
namespace
View
{
public
interface
IView
{
string
Imie {
get
;
set
; }
string
Nazwisko {
get
;
set
; }
IList
<
string
> Przedmioty {
set
; }
}
}
4. Rezultat i Wniosek
W Prosty i szybki sposób można budować rozwinięte aplikację zachowując hierarchię w kodzie i
wykonywaniu się programu.
MVP pozwala implementować różne interfejsy użytkownika i w prosty sposób stosować wcześniej
napisany kod, niczym wymiana szuflady.
Forma przedstawienia danych została zaimplementowana poniżej widoku, dzięki czemu można w
łatwy i prosty sposób manipulować wyglądem programu i jego edycją. Natomiast Model posiada
niezbędne dane do przetworzenia przez program.