2009-12-12 8 views
5

Gdzie jest najlepsze miejsce do sprawdzania poprawności danych, które będą używane przez model. Na przykład pomyśl o formularzu rejestracyjnym. Mamy pewne dane, które pochodzą z formularza rejestracyjnego. Więc gdzie jest najlepsze miejsce do weryfikacji tych danych. Powinniśmy sprawdzić wszystkie dane za pomocą instrukcji if lub specjalnej klasy walidatora, a to oznacza dużo kodu, więc chcę się dowiedzieć, gdzie jest to miejsce.Warstwa walidacji w wzorcu MVC

W kontrolerze? lub model?

Zarówno? Ponieważ niektóre dane powinny być zatwierdzone przez inne modele?

Jeśli nie jesteś pewien dokładnej odpowiedzi, spróbuj znaleźć możliwe zalety i wady obu sposobów.

Odpowiedz

2

Z pewnością nie w sterowniku, jego jedynym zadaniem powinno być jedynie kontrolowanie żądania/odpowiedzi i zapoznanie się ze wzorem i wzajemne oglądanie. Zrób to w modelu biznesowym. Nie za pomocą mnóstwa instrukcji if, ale za pomocą pętli for i abstrakcyjnej architektury sprawdzania poprawności.

Sprawdzanie poprawności w widoku powinno być wykonywane tylko w celu poprawy komfortu użytkowania. W webappach widok jest w zasadzie stroną HTML. W tym sprawdzanie poprawności jest możliwe tylko przy JavaScript, który działa całkowicie po stronie klienta. Klient ma nad nim pełną kontrolę, na przykład hakowanie/dezaktywowanie. Użyj funkcji sprawdzania poprawności JS tylko, aby poprawić komfort użytkowania (tj. Szybsza reakcja, brak błysku zawartości). Nadal przeprowadzaj (tę samą) walidację po stronie serwera, aby uzyskać lepszą niezawodność.

+0

Ale niektóre dane powinny być zatwierdzone przez inne modele? Na przykład, zanim dodamy ulubiony wiersz wideo, powinniśmy sprawdzić istnienie wideo. –

+0

Zrób to również w modelu biznesowym. Uwaga, model biznesowy, a nie model danych. – BalusC

+0

Przepraszam, myślę, że tak naprawdę nie znam tych terminów i ich definicji. Możesz podać dowolne źródło, które mogę je poznać. –

7

Źródło danych walidacyjnych powinno znajdować się w modelu, podczas gdy rzeczywiste sprawdzenie powinno prawdopodobnie zostać wykonane na poziomie widoku (być może z podpowiedziami javascript lub UI) i na poziomie modelu. Puryści będą sugerować, że pogląd nie powinien być zaangażowany, ale nie zgadzam się.

+1

Puryści mają rację, ale purystom udało się również nauczyć ich rzemiosła w programowaniu aplikacji na komputery. W Internecie robi to w widoku, a także model ma tę zaletę, że zapisuje żądanie HTTP w obie strony. Łatwo to pooh-pooh osiągnąć, jeśli masz luksus aplikacji komputerowej, w której wszystko znajduje się na tej samej maszynie, często zajmując tę ​​samą przestrzeń pamięci. Więc prawdopodobnie masz rację. Zrób to w obu. – RibaldEddie

+0

Nie zrobię sprawdzania poprawności ** tylko ** z Javascriptem, ponieważ może zostać zhakowany/sfałszowany/wyłączony. Używaj go tylko dyskretnie, aby poprawić wrażenia użytkownika (tj. Brak cykli żądanie-odpowiedź ani flashowanie zawartości). – BalusC

+0

Zgadzam się. Dane powinny zostać przekazane do modelu (w tym przypadku tablicy $ _POST) i tam zostać sprawdzone. Zgadzam się również z js w widoku. – AntonioCS

1

Wprowadzenie sprawdzania poprawności w swoich modelach zapobiega konieczności powtarzania kodu walidacyjnego w grupie kontrolerów.

1

Walidacja powinna być przeprowadzona zarówno w modelu, jak iw widoku moim zdaniem.