Definicja #
MVC (Model-View-Controller) to wzorzec architektoniczny (architectural pattern) dzielący aplikację na trzy współpracujące warstwy, każda z wyraźnie określonymi odpowiedzialnościami. Wzorzec ten wprowadził Trygve Reenskaug w latach 70. XX wieku (Smalltalk), a jego popularność ogromnie wzrosła wraz z rozwojem frameworków webowych.
Trzy warstwy MVC:
- Model — reprezentuje dane i logikę biznesową aplikacji; zawiera klasy domenowe, encje bazy danych, repozytoria i serwisy; Model nie wie nic o widoku ani kontrolerze
- View (Widok) — warstwa prezentacji; generuje interfejs użytkownika (HTML, JSON, XML) na podstawie danych z Modelu; nie powinna zawierać logiki biznesowej — tylko wyświetlanie
- Controller (Kontroler) — warstwa koordynująca; odbiera żądania HTTP, wywołuje odpowiednie metody Modelu, wybiera właściwy Widok i przekazuje do niego dane; jest 'klej' łączący Model i View
Typowy przepływ żądania w aplikacji webowej MVC:
- Użytkownik wysyła żądanie HTTP (np. GET /products/42)
- Router kieruje żądanie do odpowiedniego Kontrolera (ProductsController.Show)
- Kontroler wywołuje Model (repozytorium, serwis domenowy) by pobrać produkt o ID 42
- Kontroler przekazuje dane do Widoku
- Widok generuje odpowiedź (HTML strony lub JSON dla API)
MVC w popularnych frameworkach: ASP.NET Core MVC (C#), Spring MVC (Java), Ruby on Rails, Django (Python, technicznie MTV ale koncepcyjnie MVC), Laravel (PHP).
Zastosowania #
MVC stosuje się do:
- Budowania aplikacji webowych z wieloma stronami (server-side rendering) — frameworki MVC jak ASP.NET Core MVC, Spring MVC, Rails generują HTML po stronie serwera
- REST API z kontrolerami — w podejściu API-first Kontroler zwraca JSON zamiast widoku HTML; model pozostaje bez zmian
- Aplikacji desktopowych — MVC był pierwotnie wzorcem dla GUI; Windows Forms, WinForms, macOS/iOS MVC Controller
- Oddzielenia logiki biznesowej od prezentacji — Model jest testowalny niezależnie od warstwy HTTP; testy jednostkowe Modelu bez uruchamiania serwera
- Dużych aplikacji wieloosobowych — jasny podział odpowiedzialności ułatwia pracę zespołową: frontend = View, backend = Model + Controller
Ścieżka nauki #
MVC jest podstawowym wzorcem architektury, którego powinna być świadoma każda osoba tworząca aplikacje webowe.
Zacznij od:
- Zrozumienie odpowiedzialności każdej warstwy — co należy do Modelu, Widoku, Kontrolera
- Prosty przykład w wybranym frameworku: ASP.NET Core MVC (C#), Spring MVC (Java) lub Flask/Django (Python)
- Routing — jak żądanie HTTP trafia do właściwego Kontrolera
- Formularze HTML i walidacja — dane z formularza → Kontroler → Model → odpowiedź
Następnie pogłębiaj:
- Wzorce pochodne: MVVM (Mobile/Desktop, Angular), MVP (Mobile Android), różnice i zastosowania
- Clean Architecture i DDD — jak MVC wpisuje się w większe wzorce architektoniczne
- REST API z MVC — Kontroler jako endpoint API, serializacja JSON, versioning
- Testowanie warstw: testy jednostkowe Modelu, testy integracyjne Kontrolera (MockMvc, WebApplicationFactory)
- Alternatywy: CQRS + MediatR, Minimal API w .NET — kiedy tradycyjny MVC ma ograniczenia
FAQ #
- Czym różni się MVC od MVVM?
- MVC (Model-View-Controller) to wzorzec gdzie Kontroler obsługuje logikę sterowania i jest 'klejem' między Modelem a Widokiem. MVVM (Model-View-ViewModel) zastępuje Kontroler ViewModelem, który jest związany (data binding) z Widokiem dwukierunkowo — zmiana w Widoku automatycznie aktualizuje ViewModel i odwrotnie. MVVM jest popularny w aplikacjach SPA (Angular, Vue) i mobilnych (WPF, SwiftUI).
- Czy MVC to to samo co ASP.NET MVC?
- ASP.NET Core MVC to implementacja wzorca MVC przez Microsoft dla platformy .NET. MVC jako wzorzec architektoniczny jest koncepcją niezależną od technologii — implementują go również Spring MVC (Java), Ruby on Rails, Django (Python), Laravel (PHP). ASP.NET Core MVC to jedno z wielu wdrożeń tego wzorca.
- Czym jest Routing w MVC?
- Routing to mechanizm mapowania żądań HTTP (URL + metoda HTTP) na konkretne metody Kontrolera. W ASP.NET Core MVC routing konfiguruje się przez atrybuty ([Route], [HttpGet]) lub konwencję ({controller}/{action}/{id}). Router decyduje, który Kontroler i która metoda obsłuży dane żądanie.
- Ile zarabia Developer znający MVC?
- MVC to wiedza bazowa każdego backendowego developera — sama w sobie nie determinuje wynagrodzenia. Mid Backend Developer (ASP.NET Core MVC, Spring MVC) zarabia w Polsce od 10 000 do 18 000 zł brutto, senior od 18 000 do 30 000 zł. MVC jest wymaganą, nie wyróżniającą umiejętnością.