<p>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.</p>
<p>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ć :))</p>
<p>Do rodziny Model-View zalicza się trzy (a przynajmniej o tylu mi wiadomo :)) wzorce:</p>
<ul>
<li> MVC– Model-View-Controler</li>
<li>MVP – Model-View-Presenter</li>
<li>MVVM – Model-View-ViewModel</li>
</ul>
<p>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.</p>
<p>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, czy JavaFx dla MVP, a WindowsPresentationFoundation dla MVVM (który został stworzony właśnie na potrzeby WPF).</p>
<p>W kilku bliższych lub dalszych postach opiszę każdy z wspomnianych wzorców.</p>