vzor Model-View-Controller

Napsal Mgr.Radovan Kaluža (») 21. 4. 2006 v kategorii IT, internet, přečteno: 1180×
Tento vzor dělí interaktivní aplikaci na tři komponenty. Model obsahuje jádro funkcionality a data, Views (pohledy) zobrazují informace pro uživatele a Controllers zpracovávají uživatelský vstup. Views a Controllers spolu zahrnují uživatelské rozhraní. Mechanismus šíření změn zabezpečuje konzistentnost mezi uživatelským rozhraním a modelem.

Kontext
Interaktivní aplikace s pružným rozhraním člověk-počítač.

Problém
Uživatelské rozhraní je náchylné v požadavcích na změny. Když rozšíříte funkcionalitu aplikace, musíte modifikovat přístup k menu o nové funkce. Různí uživatelé mají konfliktní požadavky na uživatelské rozhraní. Je-li uživatelské rozhraní těsně propojeno s funkcionálním jádrem aplikace je budování systému s uvedenou flexibilitou drahé a náchylné k chybám,. To ale vyústí v potřebu vývoje a údržby několika podstatně odlišných programových systémů, jeden pro každé uživatelské rozhraní.

Následující požadavky ovlivňují řešení:

  • stejné informace jsou prezentovány odlišně v různých oknech, např. sloupcový graf, koláčový graf, číselná tabulka
  • zobrazování a chování aplikace musí odrážet okamžitou manipulaci s daty
  • změny v uživatelském rozhraní by měly být snadné a možné i za běhu programu
  • podpora různých standardů a portování uživatelského rozhraní by neměla ovlivňovat kód jádra aplikace

Řešení
Model-View-Controller (MVC) byl poprvé uveden v objektově orientovaném programovém prostředí Smalltalk-80. MVC dělí interaktivní aplikaci na tři oblasti: zpracování (výpočet), vstupy, výstupy. Komponenta model zapouzdřuje základní data a funkcionalitu. Model je nezávislý na specifikacích vstupního a výstupního chování aplikace. Komponenta View (pohled) zobrazuje uživateli informace. View dostává data od modelu. Na model může existovat několik pohledů. Každá komponenta View je asociovaná s komponentou controller. Controllers dostávají vstup obyčejně jako události, které jsou způsobeny pohybem myši, stisknutím tlačítka myši, nebo stisknutím klávesy na klávesnici. Tyto události jsou transformovány na požadavky služeb pro model, nebo view. Uživatel má interakci se systémem výhradně prostřednictvím komponent controller.

Separace komponenty model od komponent view a controller umožňuje násobné pohledy na stejný model. Pokud uživatel změní model prostřednictvím komponenty controller jedné komponenty view, všechny ostatní komponenty view závislé na těchto datech se také změní. Komponenta model proto uvědomuje všechny komponenty view, zda-li se jejich data změnila. Komponenty view na druhou stranu obnovují data z komponenty model a aktualizují zobrazované informace. Mechanismus propagace změn je také popsán ve vzoru Publisher-Subscriber.

Publisher-Subscriber

Tento vzor pomáhá udržet synchronizovaný stav spolupracujících komponent. K dosažení cíle je použito jednosměrné šíření změn. Jedena komponenta publisher uvědomuje libovolný počet komponent subscriber (předplatitelů) o změně stavu.

Scénáře použití:
1. Ukazuje, jak uživatelský vstup, který způsobí změny v modelu, spouští mechanismus šíření změn.

  • Komponenta controller akceptuje uživatelský vstup prostřednictvím své procedury zpracovávající události, interpretuje událost a aktivuje služební proceduru modelu.
  • Komponenta model vykoná požadovanou službu. Výsledkem je změna interních dat.
  • Komponenta model uvědomí všechny komponenty view (pohledy) a controllers registrované v mechanismu šíření změn o změnách voláním jejich update proceduru.
  • Každá komponenta view pak samostatně požaduje změněná data na komponentě model a zobrazí je na obrazovce.
  • Každá registrovaná komponenta controller obnoví data z modelu, aby umožnila,nebo zakázala jisté uživatelské funkce.
  • Původní komponenta controller znovu získá řízení a vrací se z procedury zpracovávající událost.

/obrazky/radovan.bloger.cz/mwc.gif
Na obrázku je znázorněn 1. scénář pomocí diagramu sekvencí UML.




2. Ukazuje inicializaci MVC komponenty.

  • Nejdříve je vytvořena instance komponenty model, která pak inicializuje vnitřní datové struktury.
  • Je vytvořena instance komponenty view, která si bere odkaz na komponentu model, jako parametr inicializace.
  • Komponenta view se registruje v mechanismu šíření změn modelu.
  • Komponenta view pokračuje vytvořením controlleru. Controlleru předává jak referenci na sebe, tak i referenci na model.
  • Komponenta controller se také registruje v mechanismu šíření změn modelu.
  • Po inicializaci začne aplikace zpracovávat události.

/obrazky/radovan.bloger.cz/mwc2.gif
Na obrázku je uveden 2. scénář (inicializace vzoru MVC) pomocí sekvenčního diagramu UML

Výhody

  • Vícenásobné pohledy na stejný model.
  • Synchronizované pohledy.
  • Snadno zaměnitelné komponenty views a controllers.

Slabá místa

  • Vzrůstající složitost.
  • Rychle rostoucí počet operací update.
  • Neefektivnost v přístupu k datům v pohledu.
  • Nevyhnutelnost změn komponent views a controllers při portování.
  • Problémy s použitím MVC s moderními nástroji uživatelského rozhraní.

Facebook Twitter Linkuj.cz

Komentáře

Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
www.iphonetapety.info iphone wallpapers www.iphone z IP 193.179.30.*** | 9.2.2009 16:47
www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info www.iphonetapety.info iphone wallpapers www.iphonetapety.info iphone tapety www.iphonetapety.info iphone pozadi
www.iphonetapety.info free iphone 3g wallpapers
www.iphonetapety.info
Andy z IP 77.242.88.*** | 15.12.2009 22:42
Ojoj, pokazil jsem hodnoceni, dal jsem vam 4, ovsem omylem, melo to byt 2 smile Jsem zdrcen vlastni neschopnosti cist informace, opravdu sorry. Snad to mohla byt i jednicka. Nemate prosim nekde vice rozvedene slabe misto "Problémy s použitím MVC s moderními nástroji uživatelského rozhraní." ? Marne premyslim co to v praxi znamena.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
[*1*] [*2*] [*3*] [*4*] [*5*] [*6*] [*7*] [*8*] [*9*] [*10*] [*11*] [*12*] [*13*] [*14*] [*15*] [*16*] [*17*] [*18*] [*19*] [*20*] [*21*] [*22*] [*23*] [*24*] [*25*] [*26*] [*27*] [*28*] [*29*] [*30*] [*31*] [*32*] [*33*] [*34*] [*35*] [*36*] [*37*] [*38*] [*39*] [*40*] [*41*] [*42*] [*43*] [*44*] [*45*] [*46*] [*47*] [*48*] [*49*] [*50*]   [b] [obr]
Odpovězte prosím číslicemi: Součet čísel dvanáct a čtyři