MVC (Model-View-Controller)
MVC – skrót od Model-View-Controller – jest to architektoniczny wzorzec projektowy stosowany w tworzeniu oprogramowania, szczególnie w aplikacjach internetowych i desktopowych. Wzorzec rozdziela aplikację na trzy odrębne komponenty, co umożliwia lepszą organizację kodu, ułatwia testowanie oraz wspiera równoczesny rozwój interfejsu użytkownika i logiki biznesowej.
Historia
Wzorzec MVC został po raz pierwszy opisany w latach 1979 w pracy Trygve Reenskaug na Uniwersytecie w Xerox PARC. Wykorzystywany początkowo w języku Smalltalk, z czasem stał się podstawą wielu nowoczesnych frameworków programistycznych.
Składniki MVC
- Model – Model reprezentuje dane oraz logikę biznesową aplikacji. Odpowiada za dostęp do baz danych, walidację danych i ich manipulację.
- View – Widok (ang. View) jest odpowiedzialny za prezentację danych użytkownikowi. Zazwyczaj zawiera szablony HTML, CSS oraz kod JavaScript generujący interfejs.
- Controller – Kontroler pośredniczy pomiędzy Modelem a Widokiem. Odbiera żądania od użytkownika, wywołuje odpowiednie metody Modelu i wybiera odpowiedni Widok do wyświetlenia.
Zasady działania
- Użytkownik wykonuje akcję w interfejsie (np. kliknięcie przycisku).
- Żądanie jest przekazywane do Kontrolera.
- Kontroler przetwarza żądanie, wywołując metody Modelu w celu uzyskania lub modyfikacji danych.
- Po otrzymaniu wyników Modelu, Kontroler wybiera odpowiedni Widok i przekazuje mu dane.
- Widok generuje odpowiedź (np. stronę HTML) i zwraca ją do przeglądarki użytkownika.
Implementacje w popularnych technologiach
Wzorzec MVC jest podstawą wielu frameworków, w tym:
- ASP.NET MVC – platforma firmy Microsoft do budowy aplikacji webowych w języku C#.
- Ruby on Rails – framework w języku Ruby, szeroko promujący konwencję „konwencja ponad konfigurację”.
- Spring MVC – część ekosystemu Spring w języku Java.
- Django – chociaż opiera się na wzorcu MTV (Model-Template-View), jest blisko spokrewniony z MVC.
Warianty i pochodne
Rozwijając MVC, powstały liczne modyfikacje, takie jak:
- MVP (Model-View-Presenter) – stosowany m.in. w aplikacjach .NET WinForms i Android.
- MVVM (Model-View-ViewModel) – popularny w WPF, Silverlight oraz w Xamarin.
- HMVC (Hierarchical MVC) – wprowadzający hierarchię kontrolerów, używany w niektórych frameworkach PHP.
Zalety i wady
Zalety
- Rozdzielenie logiki biznesowej od warstwy prezentacji zwiększa czytelność kodu.
- Umożliwia równoczesną pracę zespołów frontendowych i backendowych.
- Ułatwia testowanie jednostkowe, szczególnie kontrolerów i modeli.
- Wspiera ponowne użycie komponentów (np. ten sam Model może obsługiwać różne Widoki).
Wady
- Wprowadza dodatkową warstwę abstrakcji, co może zwiększyć złożoność prostych aplikacji.
- Nie zawsze pasuje do aplikacji jednopunktowych (np. małe skrypty CGI).
- Wymaga dyscypliny w organizacji kodu, co może być wyzwaniem w zespołach nieprzyzwyczajonych do tego wzorca.
Przykład prostego kontrolera w języku PHP
<?php
class ArticleController {
public function show($id) {
$model = new ArticleModel();
$article = $model->find($id);
$view = new View('article/show');
$view->render(['article' => $article]);
}
}
?>
W powyższym przykładzie kontroler ArticleController pobiera dane z ArticleModel i przekazuje je do widoku article/show.
Powiązane pojęcia
Wzorzec MVC pozostaje jednym z najważniejszych i najczęściej stosowanych podejść w projektowaniu nowoczesnych aplikacji, wpływając na sposób organizacji kodu w tysiącach projektów na całym świecie.