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 |
---|
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.
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ń.
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; }
}
}
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.