
Zastanawiam się jak zrealizować dla przykładu rejestrację użytkownika. Chodzi mi o moment już odbierania formularza.
Podejście pierwsze, wstępne: wywołuje się akcja, która ma za zadanie rejestrację użytkownika. Waliduje ona określone pola pobrane z formularza i jeżeli wszystko jest OK, hashuje hasło i następnie wywołuje model użytkowników, do którego przekazuje te dane (no i są tam dodawane do bazy). Model nie zajmuje się walidacją wcale.
Problem tego podejścia jest taki, że chęć zarejestrowania użytkownika gdzieś indziej (z walidacją) wymaga kopiowania większości kodu akcji (bo nie można po prostu jej tak wywołać, gdyż robi ona niepożądane rzeczy typu wczytywanie widoku)... No i sama akcja jest rozpasła.
Podejście drugie: wydzielenie kodu walidacji użytkownika do oddzielnego kontrolera z akcją Register(), która zajmie się walidacją i w razie czego wypluje wyjątek walidacji który przechwycimy w akcji / miejscu, gdzie chcemy dodać użytkownika.
Wada: dodatkowy plik kontrolera, którego funkcjonalność wcześniej realizowała akcja.
Podejście trzecie: przeniesienie walidacji do modelu, po prostu wywołujemy metodę Register() w modelu, która zajmuje się wszystkim (ostatecznie wypluwa wyjątek walidacji/błędu bazy danych)
Wady: niemożność dodania do bazy danych niewalidujących się (a może być gdzieś w kodzie taka potrzeba), rozpasły model.
I teraz pytanie, które podejście będzie najlepsze, a może da się to zrobić logiczniej i prościej?

Pozdrawiam