Řadič zobrazení modelu

Model-View-Controller nebo MVC je motiv softwarové architektury pro grafická rozhraní uvedený na trh v roce 1978 a velmi oblíbený pro webové aplikace . Vzor je tvořen třemi typy modulů se třemi různými povinnostmi: modely, pohledy a řadiče.

Tento vzor používá mnoho rámců pro webové aplikace, jako jsou Ruby on Rails , Grails , ASP.NET MVC , Spring , Struts , Symfony , Apache Tapestry , Laravel nebo AngularJS .

Dějiny

Vzor MVC vytvořil Trygve Reenskaug během své návštěvy výzkumného střediska Palo Alto Research Center (zkráceně PARC) v roce 1978. Původní název je vzor editoru zobrazení modelu , poté byl rychle přejmenován na model model-view-controller . Vzor MVC byl poprvé použit k vytvoření grafických rozhraní s programovacím jazykem Smalltalk v roce 1980.

Popis

Aplikace kompatibilní s MVC má tři typy modulů: modely, pohledy a řadiče.

Modelka Prvek, který obsahuje data i logiku související s daty: ověření, čtení a záznam. Může ve své nejjednodušší podobě obsahovat pouze jednu hodnotu nebo složitější datovou strukturu. Model představuje vesmír, ve kterém je aplikace součástí. Například pro bankovní aplikaci model představuje účty, zákazníky a transakce, jako jsou vklady a výběry, a ověřuje, že výběry nepřekračují úvěrový limit. Pohled Viditelná část grafického rozhraní . Pohled používá model a může to být diagram, formulář, tlačítka atd. Pohled obsahuje vizuální prvky i logiku potřebnou k zobrazení dat z modelu. V typické desktopové aplikaci pohled získává dotazy potřebné k prezentaci modelu. Může také aktualizovat model zasláním příslušných zpráv. Ve webové aplikaci pohled obsahuje značky HTML . Ovladač Modul, který zpracovává akce uživatelů, upravuje model a prohlíží data.

Závislosti

Model je nezávislý na ostatních modulech. Nepoužívá pohled ani ovladač, může jim však posílat zprávy. Mezi pohledem a modelem jsou dvě vazby: za prvé pohled čte data z modelu a za druhé přijímá zprávy z modelu. Vzhledem k tomu, že pohled je přidružen k modelu a model je nezávislý, může stejný model použít několik pohledů.

Aspekty řízení vstupu / výstupu uživatelského rozhraní jsou technicky velmi odlišné a mají slabou vzájemnou závislost. Správa vstupů je delegována na správce, zatímco za správu výstupů odpovídá pohled.

Pohled je závislý na modelu. Dotáže se jej, aby zobrazil reprezentaci.

Řadič závisí na pohledu a modelu: pohled má vizuální prvky, které může uživatel ovládat. Řadič reaguje na akce provedené v pohledu a upravuje data modelu.

V případě modelu pohledu model obsahuje data, která řadič předává pohledu. V případě doménového modelu obsahuje všechna data související s aktivitou a také logiku operací úpravy a ověření dat.

MVP a MVVM

Model-View-moderátor (MVP) a Model-View-pohled modelu (MVVM) vzory jsou podobné vzory Model-View-regulátor, s několika rozdíly.

Ve webových aplikacích

Vzor MVC byl vytvořen za účelem implementace uživatelských rozhraní. Některé podrobnosti jsou zarovnány s jazykem Smalltalk, ale obrys lze použít v jakémkoli prostředí. Akce → aktualizace → cyklus zobrazení vyvolaný tímto vzorem se dobře hodí pro webové aplikace. Kromě toho šéf ukládá oddělení předmětů a značky HTML se tak omezují na zobrazení, což zlepšuje udržovatelnost aplikace. Byl to rámec Ruby on Rails pro webové aplikace, který tomuto šéfovi přinesl nový zájem.

Tento vzor používá mnoho rozhraní pro webové aplikace, jako jsou Ruby on Rails , Django , ASP.NET MVC , Spring , Struts nebo Apache Tapestry .

V klasické implementaci vzoru MVC pohled čeká na změny modelu a poté změní prezentaci odpovídajících vizuálních prvků. Tato implementace se aplikuje na desktopové aplikace s rámci jako Swing . Protokol HTTP neumožňuje tuto implementaci pro webové aplikace. U druhé se během akce uživatele přepočítá obsah zobrazení a poté se odešle klientovi.

Průběh zpracování

Stručně řečeno, když klient odešle žádost do aplikace:

Výhody

Výhodou tohoto modelu je jasnost architektury, kterou ukládá. To zjednodušuje úkol vývojáře, který se pokouší provést údržbu nebo vylepšení projektu. Úprava léčby ve skutečnosti pohled nemění. Například můžete přepnout z databáze typu SQL na XML jednoduše změnou zpracování interakce s databází a pohledy nebudou ovlivněny.

MVC ukazuje své limity v kontextu aplikací využívajících webové technologie, postavených z aplikačních serverů . Poté jsou zavedeny další vrstvy a také mechanismy inverze řízení a vkládání závislostí .

Rozdíl s třívrstvou architekturou (třívrstvá)

Třívrstvá (třívrstvá) architektura je vrstvený model, to znamená, že každá vrstva komunikuje pouze se svými sousedními vrstvami (horní a dolní) a tok řízení prochází systémem shora dolů. Horní vrstvy ovládají spodní vrstvy, tj. Horní vrstvy jsou vždy zdroji interakce (klienti), zatímco spodní vrstvy reagují pouze na požadavky (servery).

V modelu MVC se obecně uznává, že pohled může přímo konzultovat model (číst), aniž by procházel řadičem. Na druhou stranu musí nutně projít řadičem, aby provedl modifikaci (zápis). Tady je tok řízení obrácen z vrstveného modelu, pak může řadič posílat požadavky do všech pohledů, aby se aktualizovaly.

Ve třívrstvé architektuře, pokud pohled mění data, musí být aktualizovány všechny pohledy ovlivněné změnou, a proto je užitečnost použití MVC v prezentační vrstvě. Prezentační vrstva proto umožňuje stanovit pravidla typu „aktualizovat pohledy týkající se X, pokud jsou změněny Y nebo Z“. Pokud jsou však logické vztahy příliš vysoké, tato pravidla se rychle stanou příliš četnými a nezvládnutelnými. V takovém případě lze tento problém snadno vyřešit jednoduchým obnovením zobrazení v pravidelných intervalech. Je to také nejrozšířenější řešení v tříúrovňové architektuře, přičemž použití MVC je moderní a stále okrajové.

Příklady architektury MVC

V ASP.NET

V C ++

V JavaScriptu

V strojopisu

V ECMAScript

V Groovy

V Javě

V Objective-C

V Perlu

Webově orientované rámce v Perlu  :

V PHP

Rámečky založené na architektuře MVC:

Použití rámce není povinností.

V Pythonu

V Ruby

Podívejte se také

Poznámky a odkazy

  1. (en) Stephen Walther, ASP.NET MVC Framework Unleashed , Sams Publishing - 2009, ( ISBN  9780768689785 )
  2. (en) Adam Freeman a Steven Sanderson, Pro ASP.NET MVC 3 Framework , Apress - 2011, ( ISBN  9781430234043 )
  3. (en) Joey Lott a Danny Patterson, Advanced ActionScript with Design Patterns , Adobe Press - 2007, ( ISBN  9780132701372 )
  4. „  modely - výhledy - řídící  “ , na http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html ,10. prosince 1979
  5. „  Model-View-Controller (MVC), její minulost a současnost  “ , na http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html ,20. srpna 2003
  6. (en) John Ciliberti, ASP.NET MVC 4 recepty: přístup k řešení problému , Berkeley, Apress,2013, 632  s. ( ISBN  978-1-4302-4774-6 , číst online )
  7. (en) Colin Yates - Seth Ladd - Marten Deinum - Koen Serneels a Christophe Vanfleteren, Pro Spring MVC: With Web Flow , Apress - 2012, ( ISBN  9781430241553 )
  8. (in) Fabien Potencier, „  Co je Dependency Injection?  » , 26. března 2009.
  9. http://blog.nalis.fr/index.php?post/2009/10/19/Architecture-%3A-Le-Design-Pattern-MVC-en-PHP příklad implementace MVC v PHP]