MVP i MVC – wstęp, rozwinięcie, bez zakończenia

Siyakwamukela! (zulu)

Wracamy do rozważań nad modelowanie aplikacji. W ostatnim wpisie, gdzie wyciągaliśmy informacje ze scenariuszy przypadków użycia narzuciłem temat wzorców architektonicznych MVP i MVC. Wtedy o nich wspomniałem, podlinkowałem parę rzeczy, jednak dzisiaj mam nadzieję troszkę to rozwinąć 🙂

Wzorce projektowe i architektoniczne

Wzorzec projektowy jest narzędziem do rozwiązywania powtarzalnych problemów pojawiających się podczas implementacji oprogramowania. Co ważne, wzorzec mówi tylko, jak podejść do problemu, od której strony go ugryźć, daje schemat rozwiązania zagadnienia. O wzorcach projektowych powstała świetna książka, którą napisali Erich Gamma, Richard Helm, Ralph Johnson i John Vlissides, czyli grupa określana „Bandą czworga”. Mowa oczywiście o książce „Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku„. W dzisiejszym programowaniu bez wzorców projektowych nie ma sensownej pracy.

Wzorzec architektoniczny jest podobnym narzędziem do wzorca projektowego, jednak tutaj problemy implementacyjne nie dotyczą relacji klas, obiektów, zaś odnoszę się do struktury systemu, podziału na moduły i relacji pomiędzy nimi. MVP i MVC są właśnie takimi wzorcami.

Zacznijmy od MVC

Głównym zadaniem programisty nie jest wbrew pozorom zaimplementowanie fury kodu, która robi coś tam. Programista jest postawiony przed pewnym problemem, którego musi dokonać analizy i wykonać podział na mniejsze, dające się łatwo zaimplementować fragmenty. Implementacja jest procesem wtórnym.

We wzorcu MVC podchodzimy do analizowanego problemu rozbijając go na trzy składowe, od których bierze się nazwa wzorca:

  1. Warstwa Model – w tej warstwie zawieramy całą logikę biznesową aplikacji. Bardzo ważnym jest, aby nie mieszać warstw ze sobą i żeby rzeczywiście cała logika biznesowa została w tej warstwie.
  2. Warstwa View, czyli widoku – w tej warstwie zawierają się wszystkie klasy, których obiekty potem zmaterializują się w postaci interfejsu graficznego wyświetlanego użytkownikowi; poszczególne fragmenty widoku odpowiadają odpowiednim fragmentom modelu
  3. Warstwa Controller, czyli kontroler – przyjmuje akcje wywołane przez użytkownika, względem których odpowiednio zarządza aktualizowaniem modelu.

Taki podział systematyzuje sposób budowy tworzonego oprogramowania. Na poniższym diagramie można zaobserwować przebieg działania systemu zbudowanego w ten sposób.

Użytkownik systemu wciska przycisk, który jest elementem warstwy widoku. Zdarzenie to jest przekazywane do kontrolera. Kontroler wywołuje odpowiednie działania w warstwie modelu. Po wykonaniu operacji model wywołuje aktualizuje widoku, który to pobiera nowe dane w trybie odczytu z warstwy modelu, już bez uczestniczenia kontrolera.

A MVP?

We wzorcu Model-View-Presenter warstwy są tak samo podzielone. Tutaj zamiast warstwy kontrolera, mamy prezentera, który rozdziela warstwy widoku i modelu. Relacja pomiędzy warstwami wygląda jak na poniższym diagramie.

Znów widok wywołuje, tym razem w prezenterze, akcję wychwyconego zdarzenia. Prezenter zarządza aktualizację modelu. Kiedy to zostanie wykonane, model informuje prezentera, że jego stan uległ zmianie. Prezenter pobiera zaktualizowane dane z modelu, odpowiednio je formatuje i przesyła do warstwy widoku, która prezentuje je użytkownikowi.

Zastosowanie

Wzorce MVP i MVC są powszechnie stosowane w projektach. U mnie też będą zastosowane, tak jak już o tym pisałem. Na diagramach klas dla każdego scenariusza, które mam nadzieję niebawem się pojawią zobaczysz fizyczną realizację architektury systemu zgodnie ze wzorcem MVP. Taka struktura systemu jest elastyczna, łatwo można podmieniać poszczególne warstwy dlatego, że są rozdzielone od siebie.

Podsumowanie

Diagramy miały się już pojawić, ale niestety się nie ogarnąłem z tym. Jak się pali, to od razu cała wieś post ten powstał, ponieważ jeden z czytelników zasugerował mi dogłębniejsze pochylenie się nad tymi wzorcami, które de facto są bezpośrednio związane z moim projektem 🙂 Teraz niestety zaliczenia na dwóch kierunkach biorą górę i muszę się nad tym skupić, zatem na chwilkę wygaszamy pracę nad projektem. Co się odwlecze to nie uciecze 🙂 W zanadrzu mam jeszcze jeden post dla Was, ale musicie być cierpliwi 🙂

Oczywiście zachęcam do komentowania i udostępniania mojej twórczości. Każda interakcja jest na wagę złota, ponieważ pokazuje, że ktoś czyta moje wypociny 🙂 Tymczasem życzę Ci miłego dnia i do zobaczenia! 🙂

Czytaj również:
« »