encyklopedia.space

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

  • ModelModel reprezentuje dane oraz logikę biznesową aplikacji. Odpowiada za dostęp do baz danych, walidację danych i ich manipulację.
  • ViewWidok (ang. View) jest odpowiedzialny za prezentację danych użytkownikowi. Zazwyczaj zawiera szablony HTML, CSS oraz kod JavaScript generujący interfejs.
  • ControllerKontroler 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

  1. Użytkownik wykonuje akcję w interfejsie (np. kliknięcie przycisku).
  2. Żądanie jest przekazywane do Kontrolera.
  3. Kontroler przetwarza żądanie, wywołując metody Modelu w celu uzyskania lub modyfikacji danych.
  4. Po otrzymaniu wyników Modelu, Kontroler wybiera odpowiedni Widok i przekazuje mu dane.
  5. 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.