Model-View-Controller

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 14. února 2022; kontroly vyžadují 12 úprav .
Model-View-Controller
Angličtina  Model-View-Controller
Struktura
  • Modelka
  • Ovladač
  • Výkon
Popsáno v Návrhové vzory Ne

Model-View-Controller ( MVC , "Model-View-Controller", "Model-View-Controller") je schéma pro oddělení aplikačních dat a řídicí logiky do tří samostatných komponent: model, pohled a ovladač - takže modifikace každá složka může být provedena nezávisle [1] .

Historie

Koncept MVC popsal Trygve Reenskaug v roce 1978 [1] [2] , který pracoval ve výzkumném centru Xerox PARC na programovacím jazyku Smalltalk . Později Steve Burbeck implementoval vzor do Smalltalk-80 [1] [3] [4] .

Konečná verze konceptu MVC byla publikována až v roce 1988 v časopise Technology Object [5] .

Následně se designový vzor začal vyvíjet. Například byla představena hierarchická verze HMVC ; MVA , MVVM [6] [3] [4] .

Další kolo popularity přinesl vývoj rámců pro rychlé nasazení v Pythonu , PHP a Ruby : Django , Laravel a Ruby on Rails . V roce 2017 zaujaly rámce s MVC prominentní postavení ve vztahu k jiným rámcům bez tohoto vzoru [7] .

Rozdíly v popisu konceptu šablony

S rozvojem objektově orientovaného programování a konceptu návrhových vzorů  vznikla řada modifikací konceptu MVC, které se při implementaci různými autory mohou od originálu lišit. Tak například Erian Vermi v roce 2004 popsal příklad zobecněného MVC [8] .

V předmluvě k disertační práci Richarda Pawsona „ Naked objects “ Trygve Reenskaug zmiňuje svou nepublikovanou nejstarší verzi MVC, podle které [9] :

Schůzka

Hlavním účelem aplikace tohoto konceptu je oddělit obchodní logiku ( model ) od její vizualizace ( view , view ). Díky tomuto oddělení se zvyšuje možnost opětovného použití kódu . Tento koncept je nejužitečnější, když uživatel potřebuje vidět stejná data ve stejnou dobu v různých kontextech a/nebo z různých úhlů pohledu. Zejména se plní následující úkoly:

  1. Ke stejnému modelu můžete připojit více pohledů , aniž byste ovlivnili implementaci modelu . Některá data mohou být například prezentována jako tabulka , sloupcový graf a koláčový graf současně ;
  2. Aniž byste ovlivnili implementaci pohledů , můžete měnit reakce na akce uživatele (kliknutí na tlačítko, zadávání dat) - k tomu stačí použít jiný ovladač ;
  3. Řada vývojářů se specializuje pouze na jednu z oblastí: buď vývoj grafického rozhraní , nebo vývoj obchodní logiky . Proto je možné zajistit, že programátoři podílející se na vývoji obchodní logiky ( modelů ) nebudou vědět, která reprezentace bude vůbec použita.

Koncept

Koncept MVC umožňuje rozdělit model, pohled a ovladač do tří samostatných komponent:

Model

Model poskytuje data a metody pro práci s nimi: dotazy do databáze, kontrola správnosti. Model je nezávislý na View (neví, jak vykreslit data) a Controlleru (nemá žádné body interakce s uživatelem), pouze poskytuje přístup k datům a manipulaci s nimi.

Model je postaven tak, aby reagoval na požadavky změnou svého stavu a lze zabudovat upozornění „ pozorovatelů “ .

Model, díky nezávislosti na vizuální reprezentaci, může mít několik různých reprezentací pro jeden "model"

Prezentace

Pohled je zodpovědný za získání požadovaných dat z modelu a jejich odeslání uživateli. Pohled nezpracovává uživatelský vstup [10] .

Ovladač

Regulátor zajišťuje „komunikaci“ mezi uživatelem a systémem. Řídí a směruje data od uživatele do systému a naopak. Použije model a pohled k implementaci požadované akce.

Funkčnost a nesrovnalosti

Protože MVC nemá striktní implementaci, lze jej implementovat různými způsoby. Neexistuje žádná obecně přijímaná definice toho, kde by se obchodní logika měla nacházet. Může být jak v ovladači, tak v modelu. V druhém případě bude model obsahovat všechny obchodní objekty se všemi daty a funkcemi.

Některé rámce pevně definují, kam by měla být umístěna obchodní logika, jiné taková pravidla nemají.

Rovněž není specifikováno, kde by se mělo nacházet ověření uživatelem zadaných údajů. Jednoduché ověření může dokonce nastat v pohledu, ale jsou běžnější v řadiči nebo modelu.

Internacionalizace a formátování dat také postrádá jasné pokyny ohledně umístění.

Podmíněně povinné úpravy

K implementaci schématu „Model-View-Controller“ se používá poměrně velké množství návrhových vzorů (v závislosti na složitosti architektonického řešení), z nichž hlavní jsou „ pozorovatel “, „ strategie “, „ linker[11 ] .

Nejtypičtější implementací je, že pohled je oddělen od modelu vytvořením interakčního protokolu mezi nimi, který používá „aparát událostí“ (označení „událostmi“ určitých situací, které nastanou během provádění programu, a zasílání upozornění o všem, kteří se přihlásili k odběru): Při každé konkrétní změně interních dat v modelu (označené jako „událost“) upozorní ty pohledy, které jsou na něm závislé a které jsou přihlášeny k odběru takového upozornění – a pohled je aktualizováno. Takto se používá vzor „ pozorovatel “ .

Při zpracování reakce uživatele pohled vybere v závislosti na reakci požadovaný ovladač , který zajistí to či ono spojení s modelem. K tomu se používá vzor " strategie " nebo může být místo něj modifikován vzor " příkaz " .

Pro možnost stejného typu manipulace s dílčími objekty komplexně-složeného hierarchického typu lze použít šablonu „ linker “ . Kromě toho lze použít další návrhové vzory  - například " tovární metoda ", která vám umožní nastavit výchozí typ ovladače pro odpovídající pohled.

Nejčastější chyby

Začínající programátoři velmi často interpretují architektonický model MVC jako pasivní model MVC: model funguje výhradně jako sada funkcí pro přístup k datům a kontrolér obsahuje obchodní logiku . V důsledku toho je kód modelu ve skutečnosti prostředkem pro získávání dat z DBMS a kontrolér je typický modul naplněný obchodní logikou. V důsledku tohoto porozumění začali vývojáři MVC psát kód, který Padrigue Brady (známý v kruzích komunity Zend Framework ) popsal jako „TTUK“ („Fat Stupid Ugly Controllers“; Fat Stupid Ugly Controllers):

Průměrný TTUK získával data z databáze (pomocí databázové abstraktní vrstvy, předstíral, že jde o model) nebo manipuloval, ověřoval, zapisoval a předával data do View. Tento přístup se stal velmi populárním, protože použití takových ovladačů je podobné klasické praxi používání samostatného php souboru pro každou stránku aplikace.

— [ http://blog.astrumfutura.com/2008/12/the-m-in-mvc-why-models-are-misunderstood-and-unappreciated/ The M in MVC: Why Models are Misunderstood and Unappreciated

Ale v objektově orientovaném programování se používá aktivní model [12] MVC, kde model není pouze kombinací kódu pro přístup k datům a DBMS , ale také celé obchodní logiky ; modely mohou také v sobě zapouzdřit jiné modely. Správci jako prvky informačního systému zodpovídají pouze za:

Pouze v tomto případě se ovladač stává „tenkým“ a plní výhradně funkci spojnice (lepicí vrstvy) mezi jednotlivými komponentami informačního systému .

Viz také

Poznámky

  1. 1 2 3 4 5 6 Generic Model-View-Controller, 2007 .
  2. Trygve MH Reenskaug/MVC Archivováno 25. dubna 2018. XEROX PARC 1978-79
  3. 1 2 Steve Burbeck. [ http://www.itu.dk/courses/VOP/E2005/VOP2005E/8_mvc_krasner_and_pope.pdf Popis paradigmatu uživatelského rozhraní Model-View-Controller v systému Smalltalk-80]. Archivováno z originálu 21. září 2010.
  4. 1 2 V. A. Saveliev. Programovací aplikace ve Smalltalk-80™: Jak používat model-View-Controller (MVC) .
  5. Kuchařka pro použití paradigmatu uživatelského rozhraní řadiče model-view ve Smalltalk-80 Archivováno 15. července 2017 na Wayback Machine , Popis paradigmatu uživatelského rozhraní Model-View-Controller v systému Smalltalk -80 7. srpna, 2017 na Wayback Machine )
  6. Kuchařka pro použití paradigmatu uživatelského rozhraní model-view controller ve Smalltalk-80 . Staženo 10. ledna 2017. Archivováno z originálu 15. července 2017.
  7. hotframeworks . Získáno 10. ledna 2017. Archivováno z originálu 10. února 2017.
  8. Vermeij. Arjan Generic MVC Model v Javě Archivováno 1. října 2011 na Wayback Machine 2004
  9. Richard Pawson Nahé předměty Archivováno 28. října 2015. , PhD disertační práce, University of Dublin, Trinity College, 2004
  10. Toni Sellarès, "Řadič zobrazení modelu: složený vzor." . Získáno 16. srpna 2017. Archivováno z originálu 15. prosince 2017.
  11. E. Gamma, R. Helm, R. Johnson, J. Vlissides . Techniky objektově orientovaného navrhování. Design Patterns Archived 26. října 2011 na Wayback Machine 2001
  12. Generic Model-View-Controller . Získáno 17. června 2020. Archivováno z originálu dne 17. února 2020.

Literatura

Odkazy