MVC

Z Wikipedii

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:

w taki sposób, aby modyfikacje jednego komponentu minimalnie wpływały na pozostałe. Czasem, w odniesieniu do MVC stosuje się nazwę "modelu trójwarstwowego".

[edytuj] Przykład działania

Użycie MVC można przedstawić na przykładzie aplikacji bazodanowej. Modelem jest wtedy encja (lub ich zbiór) z bazy danych, widokiem tabela danych pokazywana użytkownikowi, a kontrolerem przyciski do manipulacji. 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-relationship 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 ze stronicowaniem, 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:

  • Model View Presenter - Kontroler (tu: Presenter) zna interfejs Widoku i posiada referencję do aktualnej jego instancji. Widok nie ma bezpośredniego dotępu do Modelu.
  • Model View Adapter
  • Model View ViewModel lub Presentation Model - wariant wykorzystywany w aplikacjach WPF, gdzie połączenie między Widokiem a Kontrolerem (tu: Modelem Widoku) realizowane jest z użyciem systemu wiązania danych WPF.
Utwórz książkę