Najważniejszą częścią kodu, która steruje aplikacją internetową, jest
Kontroler to element aplikacji internetowej, który steruje jej przebiegiem, dlatego w tym pytaniu jest odpowiedzią poprawną. W klasycznym podejściu MVC, czyli Model-View-Controller, kontroler przyjmuje żądanie użytkownika, np. wejście na adres strony, kliknięcie przycisku albo wysłanie formularza metodą POST. Potem decyduje, co dalej: sprawdza dane wejściowe, uruchamia odpowiednią logikę, korzysta z modelu, a na końcu wybiera widok, który ma zostać pokazany użytkownikowi. W praktyce w frameworkach takich jak Laravel, Symfony, Django, Spring MVC czy ASP.NET MVC kontroler jest miejscem, gdzie łączy się obsługa routingu, walidacji, sesji, uprawnień i odpowiedzi HTTP. Dobra praktyka mówi jednak, żeby kontroler nie był przeładowany logiką biznesową. Moim zdaniem to ważne, bo początkujący często robią z kontrolera wielki plik od wszystkiego. Lepiej, gdy kontroler koordynuje działanie aplikacji, a bardziej szczegółowe operacje przekazuje do modelu, serwisów albo repozytoriów. Wtedy kod jest czytelniejszy, łatwiej go testować i rozwijać.
W aplikacji internetowej łatwo pomylić role poszczególnych części, szczególnie gdy mówimy o popularnym wzorcu MVC. Widok nie steruje aplikacją, tylko odpowiada za prezentację danych użytkownikowi. To może być szablon HTML, komponent interfejsu, plik z układem strony albo fragment odpowiedzialny za wygląd formularza. Widok pokazuje wynik działania systemu, ale nie powinien decydować, jakie operacje biznesowe mają zostać wykonane po kliknięciu przycisku. Jeśli w widoku zaczyna pojawiać się dużo logiki decyzyjnej, to zwykle jest znak, że projekt robi się mało czytelny i trudny w utrzymaniu. Model też nie jest elementem sterującym całą aplikacją. Model opisuje dane i logikę związaną z danymi, na przykład użytkownika, produkt, zamówienie albo połączenie z bazą danych. Może zawierać reguły biznesowe, ale sam z siebie nie obsługuje typowego cyklu żądanie HTTP → decyzja → odpowiedź. Częsty błąd myślowy polega na tym, że skoro model przechowuje ważne dane, to uznaje się go za najważniejszy element sterujący. W praktyce sterowanie przepływem odbywa się w kontrolerze. Słowo wzorzec jest jeszcze bardziej ogólne. Wzorzec projektowy to pewien sprawdzony sposób organizacji kodu, na przykład MVC, ale nie jest konkretną częścią aplikacji wykonującą sterowanie. Z mojego doświadczenia najlepiej zapamiętać to prosto: kontroler kieruje ruchem, model pracuje na danych, a widok pokazuje wynik. Taki podział jest zgodny z dobrymi praktykami separacji odpowiedzialności i bardzo pomaga przy większych projektach webowych.