[WG.net] Wzorzec Model View Controller (MVC)
Prezentacja z XX spotkania grupy WG.net (XI PGU SqlSever) omawiająca wzorzec MVC.
Scenariusz problemu - Edycja danych
Jednym z najczęstszych przypadków tworzenia aplikacji jest umożliwienie użytkownikowi interakcji z danymi - formatkowy edytor danych. Zakres wymaganej funkcjonalności obejmuje bardzo często następujące wymagania:
- Zapytanie do bazy - wszystkie / tylko wybrane
- Przepisanie danych do kontrolek - problemy z DBNull, null, etc
- Obsługa słowników
- Obsługa akcji Edit/Add/Remove/BrowseDictionary
- Sprawdzenie poprawności
- INSERT/UPDATE/DELETE do bazy
Implementacja całości wymagań w jednym pliku asp/php/form etc powoduje nieczytelność kodu. Przeglądanie, a co ważniejsze koszt utrzymywania kodu rośnie coraz szybciej wraz ze wzrostem dodatkowej funkcjonalności.
Rozwiązanie - wzorzec MVC
Rozwiązaniem problemu jest zastosowanie wzorca Model View Controller (MVC). Polega to na podzieleniu wymaganej funkcjonalności/odpowiedzialności na 3 komponenty:
- Model – przetwarzane dane
- View – prezentacja danych
- Controller – sterowanie przepływem danych – logika aplikacji
Dokładny podział odpowiedzialności jest zależny od konkretnego wariantu wzorca czy implementacji. Dla przykładu rozważmy odpowiedzialność "sprawdzenie poprawności danych". Można włączyć ją do modelu gdy nie jest ona trywialna, a powiązana ściśle z modelem. Walidację można włączyć do widoku, gdzie poszczególne kontrolki mogą ją wykonywać. W przypadku skomplikowanego sprawdzania odpowiedzialność może przejąć kontroler.
Warianty
Wzorzec MVC posiada wiele wariantów, dostosowywanych do konkretnych technologii, metodyk programowania czy właściwości języka. Zanim zacznie się tworzenie własnej implementacji, warto przejrzeć najpopularniejsze Frameworki MVC przeznaczone dla swojej platformy programistycznej. Zazwyczaj takie gotowce zawierają dodatkową funkcjonalność jak pojemniki IoC, definiowanie przepływem logiki aplikacji, ułatwienia typowych operacji programisty, etc.
[Prezentacja 20080214_XX_WG_WzorzecMVC.zip] oraz [Ww.WgNet.MvcCalc.zip]
Code Sculptor.