Wojciech
Soczyński
Programista
eksplorator -
blog.wsoczynski.pl
Temat: Walidacja formularzy po której stronie?
Tomasz Zadora:
Wojciech Soczyński:[...]Tomasz niestety uważam, że jesteś w bardzo głębokim błędzie co do twojej interpretacji wzorca MVC. Kontroler w MVC w aplikacji www odpowiedzialny jest za zinterpretowanie żądania HTTP (na podstawie adresu, get, post etc), przekazanie odpowiednich danych do modelu, który zajmuje się ich przetwarzaniem i zwraca nam wynik, który to kontroler przekazuje do widoku w który jest prezentowany użytkownikowi.
Za to ja się obawiam, że tobie myli się struktura z logiką, a w modelu MVC, model to struktura która nie powinna sama siebie zmieniać.
Model może posiadać proste metody zwracające określone dane zależne od jego stanu (np. walidacja formularza - ale to imo zły pomysł), jednak nie powinien swojego stanu tymi metodami zmieniać.
Stan modelu zmienia tylko i wyłącznie kontroler (czyli algorytm/logika), co zresztą pośrednio swoją wypowiedzią potwierdziłeś: to kontroler interpretuje request i w zależności od parametrów requestu podejmuje odpowiednie działania.
Tymczasem w całości zgodnie z Twoim tokiem rozumowania, "rozmywasz" logikę na model i kontroler co niestety nieuchronnie prowadzi do tego, że kodem się gorzej zarządza, pisząc kolokwialnie: gorzej się go ogarnia.
Nie ma czegoś takiego jak "model formularza".
Tutaj myli Ci się widok ze strukturą :)
Owszem jest "model formularza" - to struktura określająca listę pól formularza i ich właściwości.
Jeżeli chodzi o prezentację to kontroler wybiera Viewera który dostaje określony model formularza (który może być zmodyfikowany przez kontrolera) i dokonuje prezentacji.
To tyle, wydaje mi się, że dość dokładnie to wyjaśniłem.
Jeżeli ktoś uważa, że jestem w błędzie / nie podoba mu się to / etc. - jak najbardziej ma prawo :) U mnie taki podział znakomicie działa.
Będę z tobą polemizował. Oczywiście nie zamierzam Cie przekonywać do mojego punktu widzenia, natomiast chciałbym sprostować twoje spojrzenie na moją wypowiedź.
1. "Myli Ci się struktura z logiką" - Moja "interpretacja" MVC jest taka: Akcja kontrolera jest odpowiednikiem eventu np "onClick" na buttonie w aplikacji desktopowej.Do akcji zostają przekazane parametry zdarzenia (u nas request). Jako, że kliknięcie na przycisku ma wywołać określony efekt w innym miejscu aplikacji (u nas wyświetlenie widoku), musi zostać podjęte działanie którego efektem będą jakieś dane - do wyświetlenia, te dane brane są z modelu.
Dla jasności dalej desktopowy przykład:
Mamy DataGrid z kilkalnym nagłówkiem kolumny, po kliknięciu ma nastąpić sortowanie. Nagłówek został kliknięty, zostaje wywołany event. Event przekazuje do modelu prośbę o dane posortowane po polu "X", model wykonuję prośbę i zwraca dane do eventu a event zmienia zawartość DataGrida.
Może wg. Ciebie występuje tu jakieś rozmycie, ale zauważ że:
gdybyśmy owe sortowanie, które wykonuje model przeprowadzali w samym evencie (kontrolerze), to w innym miejscu systemu, chcąc mieć posortowane dane (np. dla tabelki w pdfie), musielibyśmy skopiować cały kod z eventu dla tabeli jakiemuś innemu komponentowi.
Dzięki temu, że ten proces dzieje się w modelu, możemy go zastosować w wielu miejscach, bez copy-paste'a czyli zachowujemy zasadę "DRY".
To jest trywialny przykład, natomiast obrazuje bardzo dobrze rozdzielenie tych trzech warsw - prezentacji (DataGrid), kontrolera (event) i modelu (logika i algorytm sortowania).
Wg. mnie, w MVC kontroler i widok są warstwami infrastruktury, których zadaniem jest umożliwienie korzystania z modelu.
W razie wątpliwości odsyłam do wikipedii -> http://pl.wikipedia.org/wiki/Model-View-Controller
2. Model formularza - jeżeli mówimy o liście pól w formularzu - jego strukturze to ja bym nazwał to raczej specyfikacją niż modelem.Wojciech Soczyński edytował(a) ten post dnia 07.02.11 o godzinie 18:41