Krótko o złożonych wzorcach z rodziny Model-View

Członków rodziny Model-View zalicza się do wzorców architektonicznych, jak i do wzorców projektowych. Dlaczego? Ponieważ w pewnym stopniu dyktują sposób budowy architektury systemu, a z drugiej strony wpływają  (pozostawiając jednak dużo swobody) na rozwiązania na poziomie kodu.

Wzorce złożone, jak sama nazwa wskazuje, są zwykle zbiorem kilku wzorców projektowych zaprzęgniętych do wspólnej pracy, ku wyższemu dobru. Owym dobrem najczęściej jest osiągnięcie luźniejszych powiązań(loose coupling), wyegzekwowanie prawa Demeter i  przede wszystkim pisanie SOLIDnego kodu. Konsekwencją korzystania ze wzorców złożonych jest separacja zagadnień i warstwowa budowa aplikacji(tu mamy wspomniany wpływ na budowę architektury) a tym samym jej testowalność. Oczywiście należy pamiętać, że używanie (tudzież próby używania) wzorców złożonych nie są równoznaczne z pisaniem dobrego kodu (przy odrobinie chęci można przecież, bez trudności, wszystko popsuć :)).

Do rodziny Model-View zalicza się trzy (a przynajmniej o tylu mi wiadomo :)) wzorce:
MVC     – Model-View-Controler
MVP     – Model-View-Presenter
MVVM – Model-View-ViewModel

Jak można wydedukować (no sh*t Sherlock ;)) wszystkie dostarczają pewnego rodzaju rozwiązania dotyczącego interfejsu użytkownika, a właściwie sposobu komunikacji między nim a „resztą” programu.

Są to rozwiązania na tyle popularne, że wiele osób nie znając (świadomie) podstawowych wzorców projektowych takich jak kompozyt, strategia czy obserwator, chętnie (i sprawnie) wykorzystują do pracy MVC :). Nie jest to jednak dziwne skoro wzorce z omawianej rodziny są implementowane w dziesiątkach frameworków, tak dla rozwiązań lokalnych jak i sieciowych. ASP.NET MVC, Spring Framework, czy AngularJs to przykłady dla MVC. WinForms MVP, czy JavaFx dla MVP, a WindowsPresentationFoundation dla MVVM (który został stworzony właśnie na potrzeby WPF).

W kilku bliższych lub dalszych postach opiszę każdy z wspomnianych wzorców.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *