Wzorce złożone: MVP

Posted by Przemysław Owsianik on 2021-10-03
<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&nbsp;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>&nbsp;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:&nbsp;</b>&nbsp;&nbsp;nic odkrywczego – po prostu interfejs użytkownika. W przypadku MVP, nie ma pojęcia o warstwie modelu.</li> <li><b>Warstwa prezentera:</b>&nbsp;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&nbsp;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:&nbsp;<a href="http://martinfowler.com/eaaDev/SupervisingPresenter.html">Supervising controller</a>&nbsp;i&nbsp;<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>