MVC

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, szukaj

MVC (ang. Model-View-Controller) - Model-Widok-Kontroler to architektoniczny wzorzec projektowy w informatyce, którego głównym założeniem jest wyodrębnienie trzech podstawowych komponentów aplikacji:

Wzorzec umożliwia separację logiki programu (modelu) od tego, w jaki sposób użytkownik wprowadza zmiany w danych oraz od tego, jak dane są prezentowane użytkownikowi. W ten sposób modyfikacje jednego komponentu wcale lub minimalnie wpływają na pozostałe.

  1. Model - opisuje dane i całą logikę programu - wszystkie zależności między poszczególnymi danymi.
  2. Widok - wyświetla dane przechowywane w modelu, w pożądanej przez użytkownika formie; może istnieć wiele widoków tego samego modelu.
  3. Kontroler - przekształca żądania użytkownika na żądania zrozumiałe dla modelu; może istnieć wiele różnych kontrolerów dla tego samego modelu.

Schemat działania w modelu MVC:

  1. kontroler modyfikuje dane modelu
  2. model stosownie do zmian weryfikuje i ewentualnie zgodnie z zależnościami uaktualnia inne swoje dane;
  3. model informuje wszystkie widoki, że nastąpiły zmiany (może także wyszczególniać, które dane zostały zmienione);
  4. widoki są odświeżane stosownie do aktualnych danych modelu.

Spis treści

[edytuj] Historia

MVC został po raz pierwszy opisany w 1979 roku przez norweskiego naukowca - Trygve Reenskaug.

[edytuj] Przykład działania

Użycie MVC można przedstawić na przykładzie aplikacji bazodanowej. Wtedy:

Kontroler jest odpowiedzialny za odczyt danych z bazy danych (utworzenie modelu) i przekazanie ich do warstwy widoku (interfejsu użytkownika). Gdy użytkownik wybierze pokaż kolejne, wtedy odwołanie jest przekazywane do kontrolera, który ponownie pobiera dane i przekazuje do widoku tą samą drogą.

Dzięki takiej strukturze można budować warstwy niezależnie. Dzięki odpowiednim interfejsom widok można dowolnie podmieniać - zamiast kontrolki w aplikacji okienkowej, można zastosować ten sam kod do aplikacji www lub nawet generatora plików pdf.

[edytuj] MVC i strony WWW

Wzorzec Model-Widok-Kontroler jest często także używany we frameworkach do szybkiego tworzenia aplikacji internetowych. Istnieje kilkanaście dużych frameworków PHP stosujących ten wzorzec jak np. Code Igniter, Kohana, CakePHP, Zend Framework, Symfony, ale też zupełnie prostych i "lekkich" jak np. TinyMVC - bardzo pomocny w zrozumieniu idei MVC. W Ruby jest napisany bardzo popularny Ruby on Rails, w Perlu Catalyst, a w Pythonie TurboGears, Pylons, Django (ten ostatni stosuje MTV, ang. Model-Template-View). Popularność wzorca MVC wynika z jego przydatności.

Frameworki MVC do operacji na bazach danych używają modeli i mapowania relacyjno-obiektowego, ORM (ang. object-relational mapping) - w Railsach jest to ActiveRecord, w Catalyscie np. DBIx::Class, a framework Spring w Javie używa Hibernate. Zwykle jest też możliwe użycie baz danych przez bezpośrednie zapytania SQL. Użycie modeli upraszcza typowe operacje - wyświetlanie z paginacją, edycję danych, a także uniezależnia od konkretnego typu bazy danych.

Właściwy kod programu zwykle jest umieszczany w kontrolerze, a przetworzone dane przekazywane są do odpowiedniego widoku - tu przy pomocy bibliotek szablonów (Smarty, Template Toolkit czy też JSP w przypadku Springa) generowany jest HTML, inny rodzaj widoku może generować PDF albo XML.

Wspólną cechą wielu webowych frameworków MVC jest narzucanie pewnych praktyk programistycznych - samo użycie wzorca MVC jest tego przejawem, zwykle też narzuca się pewną konwencję nazw pól w bazie danych, strukturę katalogów i plików w projekcie, konwencję nazw klas, szablonów. Dzięki temu można uniknąć żmudnej konfiguracji każdego aspektu takiej aplikacji (choć zwykle można te konwencje zmienić), a powstające projekty są spójne i łatwiejsze do zrozumienia przez nowe osoby.

Praktycznie każda aplikacja WWW korzysta z baz danych - operacje na bazach stanowią modele danych. Szablony HTML odpowiedzialne za wygląd i wyświetlanie danych są częścią widoków (np. Smarty). Kod odpowiedzialny za wykonanie określonych operacji (spinający wszystko razem) tworzy sterowniki.

[edytuj] Warianty MVC

Wykształciło się kilka modyfikacji wzorca MVC, w szczególności:

Osobiste
Przestrzenie nazw
Warianty
Działania
Nawigacja
Dla czytelników
Dla edytorów
Drukuj lub eksportuj
Narzędzia
W innych językach