Dlaczego nie pisać logiki w kontrolerze?

0

Dlaczego pisanie logiki w kontrolerze jest uważane za złą praktykę? Jakie korzyści daje przeniesienie logiki w metody kontrolera do metody jakiegoś serwisu? Kodu jest tyle samo. W ASP.NET gdy utworzę aplikację z gotowym systemem walidacji, to w kontrolerze AccountController logika jest właśnie w jego metodach. Czy programiści Microsoftu nie znają się na dobrych praktykach? Pytam poważnie, nie trolluje.

1

Wyobraź sobie aplikację dla szpitali, i nagle pojawia się nowy feature, gdzie możesz zaznaczyć, że pacjent był zszedł z tego świata i musisz odfiltrować wszystkich zmarłych z pokazywanych pacjentów. Jak logikę masz w kontrolerach to musisz zmienić każde jedno miejsce gdzie dane odwołanie występuje. W przypadku gdy logikę przeniesiesz do warstwy biznesowej (modelu) możesz to łatwo zmienić w jednym miejscu. Dodatkową rzeczą jest problem, który się pojawia jak chcesz zmienić warstwę kontrolerów, bo np. chcesz zacząć używać ProtoBufów zamiast JSONa. I co, nagle musisz również uważać by nie zmieniła się logika systemu, bo jest ona zawarta w tym samym miejscu.

0

Po pierwsze jest to wbrew wzorcowi MVC, więc jeśli wpychasz logikę do kontrolera, to już nie masz kontrolera, ani MVC.
Po drugie taki kod trudniej taki testować, a brak podziału na klasy sprzyja tworzeniu god objectów i pisaniu spaghetti kodu.

0

ale przecież walidację możesz umieścić w kontrolerze, bardziej chodzi żebyś nie mieszał z html i tworzył kontrolerów po kilkaset linii

1

Co jeżeli będziesz chciał zrobić api? Co jeżeli będziesz chciał odpalić ten kod z cli? Jeżeli masz logikę w kontrolerze, to zadziała ona tylko w kontekście webowym, jeżeli zmieni Ci się kontekst, to już nie możesz jej ponownie użyć. W kontrolerze powinieneś tylko przyjąć żądanie, wywołać odpowiedni serwis i ewentualnie wygenerować błędy w formie odpowiedniej dla IO (dla web'a jakieś errory do sesji, dla api jakiś json z błędem itd.).

Poza tym testy logiki biznesowej powinny się wykonywać w moment. Często musisz przetestować dużo edge case'ów. Jeżeli masz logikę w kontrolerze, to musisz podnosić całą aplikację, pisać skomplikowany setup bazy itd. i taki test suite szybko zaczyna się wykonywać kilka minut, a później godzin...

1 użytkowników online, w tym zalogowanych: 0, gości: 1