<p>Ostatnim wzorcem złożonym, w rodzinie Model-View, jest MVP, czyli Model-View-Presenter. Efektywnie wykorzystany może być choćby w znanym i lubianym WindowsForms – generalnie sprawdza się tam, gdzie w podobny sposób(jak w WinForms) jest budowany interfejs użytkownika.</p>
<p>Spójrzmy na warstwy w MVP. Dzięki temu łatwiej zrozumiemy różnicę między nim, a MVC, oraz MVVM do którego jest bardzo podobny:</p>
<ul>
<li><b>Warstwa modelu:</b> podobnie jak w pozostałych wzorcach z tej rodziny, reprezentują podstawowe obiekty z dziedziny problemu, oraz może, zawierać logikę biznesową.</li>
<li><b>Warstwa widoku: </b> nic odkrywczego – po prostu interfejs użytkownika. W przypadku MVP, nie ma pojęcia o warstwie modelu.</li>
<li><b>Warstwa prezentera:</b> aktualizuje widoki, a także komunikuje się z modelem.</li>
</ul>
<p>Wcześniej opisywałem wzorzec MVVM. Wydaje się, że MVP jest jego poprzednikiem, struktura zadań i zachowań poszczególnych elementów jest podobna. Różnica leży w tym (oczywiście oprócz data binding’u), że w przeciwieństwie do widoku modelu, prezenter z widokiem odzwierciedlają zazwyczaj relację jeden do jednego. Natomiast tym co różni MVP od MVC jest fakt, że model i widok są od siebie mocno odizolowane – nie istnieje między nimi żadna zależność.</p>
<img src="/static/img/blog/mvp.png" alt="" class=" postImage" />
<p>Tutaj, jak i w pozostałych wzorcach różnica między nimi pokazuje się przede wszystkim w warstwie pośredniej. Nie będę więc pisał o warstwach widoku i modelu, bo te pozostają zbliżone do ich odpowiedników w MVC i MVVM. W zamian za to odsyłam do dwóch postów Martina Fowlera, który wprowadził podział MVP na dwie wersje: <a href="http://martinfowler.com/eaaDev/SupervisingPresenter.html">Supervising controller</a> i <a href="http://martinfowler.com/eaaDev/PassiveScreen.html">Passive View</a>.</p>
<p>W każdym razie, myślę że na podstawie wpisów dotyczących wiadomych wzorców każdy będzie teraz potrafił wskazać czym się charakteryzują, a także – przy odrobinie fantazji 😉 – zaimplementować je w swoich projektach.</p>