Array ( [0] => 15487715 [id] => 15487715 [1] => cswiki [site] => cswiki [2] => Model-view-controller [uri] => Model-view-controller [3] => [img] => [4] => [day_avg] => [5] => [day_diff] => [6] => [day_last] => [7] => [day_prev_last] => [8] => [oai] => [9] => [is_good] => [10] => [object_type] => [11] => 0 [has_content] => 0 [12] => [oai_cs_optimisticky] => ) Array ( [0] => '''Model-view-controller (MVC)''' (někdy také nesprávně označovaná jako '''Model-2''') je [[softwarová architektura]], která rozděluje [[datový model]] aplikace, [[uživatelské rozhraní]] a [[řídicí logika|řídicí logiku]] do tří nezávislých komponent tak, že modifikace některé z nich má jen minimální vliv na ostatní. [1] => [2] => MVC je často chápán jako [[návrhový vzor]], nicméně se týká architektury aplikací mnohem více než klasický návrhový vzor. Tudíž může být užitečný pojem ''[[Architekturální vzor|architektonický vzor]]'' (architectural pattern; Buschmann, et al 1996) nebo také [[agregační návrhový vzor]] (aggregate design pattern)[http://c2.com/cgi/wiki?ModelViewControllerAsAnAggregateDesignPattern Model View Controller As An Aggregate Design Pattern]. [3] => [4] => Existuje také architektura [[Model 1]], která odděluje pouze datový model od uživatelského rozhraní s řídicí logikou. [5] => [6] => [7] => == Princip == [8] => [[Soubor:MVC Diagram (Model-View-Controller).svg|náhled|Diagram MVC]] [9] => Obecně řečeno, vytváření aplikací s využitím architektury MVC vyžaduje vytvoření tří komponent, mezi které patří: [10] => [11] => * '''Model (model)''', což je doménově specifická reprezentace informací, s nimiž aplikace pracuje. [12] => * '''View (pohled)''', který převádí data reprezentovaná modelem do podoby vhodné k interaktivní prezentaci uživateli. [13] => * '''Controller (řadič)''', který reaguje na události (typicky pocházející od uživatele) a zajišťuje změny v modelu. Na základě těchto změn (a s možnou pomocí návrhového vzoru [[Observer (návrhový vzor)|observer]]) se aktualizuje samotný pohled.{{Citace elektronického periodika [14] => | titul = GUI Architectures [15] => | periodikum = martinfowler.com [16] => | url = https://martinfowler.com/eaaDev/uiArchs.html [17] => | datum přístupu = 2020-02-20 [18] => }} [19] => [20] => Komponenty řadič a pohled jsou ve standardním rozdělení vrstev na [[prezentační vrstva|prezentační]], [[doménová vrstva|doménovou]] a [[datová vrstva|datovou]] obvykle zařazovány jako [[prezentační vrstva]]. V MVC je tato prezentační vrstva rozdělena mezi komponenty řadič a pohled, nicméně nejdůležitější rozdělení je mezí prezentací a doménovou vrstvou. [21] => [22] => Ačkoliv může být koncept MVC realizován různým způsobem, obecně platí tento princip: [23] => # Uživatel provede nějakou akci v uživatelském rozhraní (např. stiskne tlačítko). [24] => # Řadič obdrží oznámení o této akci z objektu uživatelského rozhraní. [25] => # Řadič přistoupí k modelu a v případě potřeby ho zaktualizuje na základě provedené uživatelské akce (např. zaktualizuje nákupní košík uživatele). [26] => # Model je pouze jiný název pro doménovou vrstvu. Doménová logika zpracuje změněná data (např. přepočítá celkovou cenu, daně a expediční poplatky pro položky v košíku). Některé aplikace užívají mechanizmus pro perzistentní uložení dat (např. databázi). To je však otázka vztahu mezi doménovou a datovou vrstvou, která není architekturou MVC pokryta. [27] => # Komponenta pohled použije zaktualizovaný model pro zobrazení zaktualizovaných dat uživateli (např. vypíše obsah košíku). Komponenta pohled získává data přímo z modelu, zatímco model nepotřebuje žádné informace o komponentě View (je na ní nezávislý). Nicméně je možné použít [[Observer (návrhový vzor)|návrhový vzor pozorovatel]], umožňující modelu informovat jakoukoliv komponentu o případných změnách dat. V tom případě se komponenta view zaregistruje u modelu jako příjemce těchto informací. Je důležité podotknout, že řadič nepředává doménové objekty (model) komponentě pohledu, nicméně jí může poslat příkaz, aby svůj obsah podle modelu zaktualizovala. [28] => # Samotnému konečnému zobrazení výsledku uživateli ještě může u web-aplikací předcházet odpověď ze serveru na klienta, aby si ihned vyžádal obnovení stránky (client side redirect, životnost 0, takže okamžitý): Tím je zaručeno, že při obnovení stránky uživatelem (refresh, F5 v prohlížeči) nevyvolá na serveru požadovanou akci opakovaně, ale že se jedná pouze o obnovení pohledu, nyní už bez požadavku na změnu dat (modelu). Účelem je změna URL a dat http requestu, aby poslední v řadě již nebyl "server-side data-affecting" (ovlivňující model), ale pouze "read-only" (pouhé zobrazení). Celý tento client-refresh (změna URL) se děje automaticky a bez povšimnutí uživatelem. [29] => # Uživatelské rozhraní čeká na další akci uživatele, která celý cyklus zahájí znovu. [30] => [31] => == Příklady implementací == [32] => Tento vzor [http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html poprvé popsal] [[Trygve Reenskaug]] v roce [[1979]]. Poprvé byl použit v jazyce [[Smalltalk]], vyvíjeném v [[Xerox]] research labs. Touto implementací bylo inspirováno mnoho dalších projektů, např.: [33] => [34] => * [[NeXTSTEP]] a [[OPENSTEP]], jejichž vývojová prostředí podporovala použití MVC; [35] => * [[Cocoa (software)|Cocoa]], založená na těchto technologiích, také používá MVC; [36] => * Microsoft Foundation Classes (MFC). [37] => [38] => Občas je možné se setkat s tvrzením, že [[Swing (Java)|Swing]] (knihovna pro tvorbu grafického uživatelského rozhraní v [[Java (programovací jazyk)|Javě]]) také užívá MVC. To není pravda, neboť tato knihovna slučuje řadič a pohled do jedné komponenty a tudíž užívá jednodušší vzor [[Model 1]]. [39] => [40] => V současné době se koncept MVC užívá především jako architektura webových aplikací. U složitějších aplikací je to způsob, jak zajistit jejich flexibilitu a spolehlivost i při častých změnách a jejich rychlém vývoji. Tento vzor bývá často pochopen nesprávně a mnoho aplikací tvrdí, že jej využívají, ačkoliv fakticky nesplňují základní požadavek, kterým je oddělení aplikační a prezentační logiky. [41] => [42] => * [[JavaServer Faces]], [[Jakarta Struts]] a [[Webwork2]] jsou momentálně nejpopulárnější rámce pro tvorbu webových aplikací, které využívají MVC. Struts pracuje na úrovni stránek, JSF na úrovni komponent (oba se ale nevylučují a je možné Struts i JSF použít zároveň). [43] => * [[Zend Framework]] [44] => * [[Symfony]] [45] => * [[CakePHP]] [46] => * [[Nette Framework]] [47] => * Vývojové prostředí [[WebObjects]] je silně založeno na MVC. [48] => * [[Fusebox (programming)|Fusebox]] [49] => * [[Mach-II]] [50] => * [[Maypole framework|Maypole]] [51] => * [[Catalyst (software)|Catalyst]] [52] => * [[Tapestry (programming)|Tapestry]] [53] => * [[ZNF]] [54] => * [[Apache Cocoon]] [55] => * [[Ruby on Rails]] [56] => * [[TurboGears]] [57] => * [[Django]] [58] => * [[ASP.NET MVC]] nebo [[ASP.NET Monorail]] [59] => * [[ATK14]] [60] => [61] => Z návrhnového vzoru MVC vychází například i vzor [[HMVC]], který využívá například framework [[Kohana]] [62] => [63] => == Odkazy == [64] => [65] => === Reference === [66] => [67] => [68] => === Externí odkazy === [69] => * {{Commonscat|Model-View-Controller pattern}} [70] => * http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/web-tier/web-tier5.html [71] => * https://web.archive.org/web/20111104151457/http://framework.zend.com/manual/en/learning.quickstart.intro.html#learning.quickstart.intro.mvc [72] => * http://ootips.org/mvc-pattern.html [73] => {{Autoritní data}} [74] => [75] => [[Kategorie:Návrhové vzory]] [] => )
good wiki

Model-view-controller

Model-view-controller (MVC) (někdy také nesprávně označovaná jako Model-2) je softwarová architektura, která rozděluje datový model aplikace, uživatelské rozhraní a řídicí logiku do tří nezávislých komponent tak, že modifikace některé z nich má jen minimální vliv na ostatní. MVC je často chápán jako návrhový vzor, nicméně se týká architektury aplikací mnohem více než klasický návrhový vzor.

More about us

About

Expert Team

Vivamus eget neque lacus. Pellentesque egauris ex.

Award winning agency

Lorem ipsum, dolor sit amet consectetur elitorceat .

10 Year Exp.

Pellen tesque eget, mauris lorem iupsum neque lacus.

You might be interested in

,'Observer (návrhový vzor)','Model 1','prezentační vrstva','datová vrstva','Cocoa (software)','JavaServer Faces','Maypole framework','Fusebox (programming)','Nette Framework','Symfony','Webwork2','Smalltalk'