Modell-View-Controller

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2022. február 14-én felülvizsgált verziótól ; az ellenőrzések 12 szerkesztést igényelnek .
Modell-View-Controller
angol  Modell-View-Controller
Szerkezet
  • Modell
  • Vezérlő
  • Teljesítmény
Leírása: Tervezési minták Nem

A Model-View-Controller ( MVC , "Model-View-Controller", "Model-View-Controller") egy olyan séma, amely az alkalmazás adatait és a vezérlési logikát három különálló komponensre osztja: modellre, nézetre és vezérlőre - úgy, hogy a minden komponens önállóan kivitelezhető [1] .

Történelem

Az MVC koncepcióját Trygve Reenskaug írta le 1978-ban [1] [2] , aki a Xerox PARC kutatóközpontban dolgozott a Smalltalk programozási nyelven . Később Steve Burbeck implementálta a mintát Smalltalk-80- ban [1] [3] [4] .

Az MVC koncepció végleges változata csak 1988-ban jelent meg a Technology Object folyóiratban [5] .

Ezt követően a tervezési minta fejlődésnek indult. Például bemutatták a HMVC hierarchikus változatát ; MVA , MVVM [6] [3] [4] .

A népszerűség további köre a Python , PHP és Ruby gyorstelepítési keretrendszereinek fejlesztése : Django , Laravel és Ruby on Rails . 2017-ben az MVC-vel rendelkező keretrendszerek előkelő helyet foglaltak el más, ezt a mintát nem tartalmazó keretrendszerekkel szemben [7] .

Sablon fogalom leírásának különbségei

Az objektum-orientált programozás és a tervezési minták koncepciójának fejlődésével  az MVC koncepció számos módosítása született, amelyek különböző szerzők által megvalósítva eltérhetnek az eredetitől. Így például Erian Vermi 2004-ben leírt egy példát egy általánosított MVC-re [8] .

Richard Pawson " Meztelen tárgyak " című disszertációjának előszavában Trygve Reenskaug megemlíti az MVC legkorábbi, kiadatlan változatát, amely szerint [9] :

Időpont

Ennek a koncepciónak az alkalmazásának fő célja az üzleti logika ( modell ) elkülönítése a vizualizációtól ( nézet , nézet ). Ennek az elválasztásnak köszönhetően megnő a kód újrafelhasználásának lehetősége . Ez a koncepció akkor a leghasznosabb, ha a felhasználónak ugyanazt az adatot egyszerre kell látnia különböző kontextusokban és/vagy különböző nézőpontokból. Különösen a következő feladatokat hajtják végre:

  1. Több nézetet is csatolhat ugyanahhoz a modellhez anélkül, hogy ez befolyásolná a modell megvalósítását . Például egyes adatok egyszerre jelenhetnek meg táblázatként , oszlopdiagramként és kördiagramként ;
  2. A nézetek megvalósításának befolyásolása nélkül megváltoztathatja a felhasználói műveletekre adott reakciókat (gombrakattintás, adatok bevitele) - ehhez elegendő egy másik vezérlő használata ;
  3. Számos fejlesztő csak az egyik területre specializálódott: vagy grafikus felület fejlesztésére, vagy üzleti logika fejlesztésére . Így biztosítható, hogy az üzleti logika ( modellek ) fejlesztésében részt vevő programozók ne legyenek tisztában azzal, hogy egyáltalán melyik reprezentációt használják.

Koncepció

Az MVC koncepció lehetővé teszi a modell, a nézet és a vezérlő három különálló részre történő szétválasztását:

Modell

A modell adatokat és módszereket biztosít a velük való munkavégzéshez: lekérdezések az adatbázisba, helyesség-ellenőrzés. A Modell független a Nézettől (nem tudja, hogyan kell megjeleníteni az adatokat) és a Vezérlőtől (nincs felhasználói interakciós pontja), csupán hozzáférést és kezelést biztosít az adatokhoz.

A modell úgy van felépítve, hogy állapotának megváltoztatásával válaszoljon a kérésekre, és beépíthető legyen a „ megfigyelők ” értesítése .

A modellnek a vizuális megjelenítéstől való függetlensége miatt több különböző reprezentációja is lehet egy "modellhez"

Bemutató

A nézet felelős azért, hogy a szükséges adatokat megkapja a modelltől és elküldje a felhasználónak. A nézet nem dolgozza fel a felhasználói bevitelt [10] .

Vezérlő

A vezérlő biztosítja a „kommunikációt” a felhasználó és a rendszer között. Vezérli és irányítja az adatokat a felhasználótól a rendszerbe és fordítva. Modellt és nézetet használ a kívánt művelet végrehajtásához.

Funkcionalitás és eltérések

Mivel az MVC-nek nincs szigorú implementációja, többféleképpen is megvalósítható. Nincs általánosan elfogadott definíció arra vonatkozóan, hogy az üzleti logikát hol kell elhelyezni. Ez lehet a vezérlőben és a modellben is. Ez utóbbi esetben a modell minden üzleti objektumot tartalmazni fog minden adattal és funkcióval.

Egyes keretrendszerek mereven meghatározzák, hogy hova kell helyezni az üzleti logikát, mások nem rendelkeznek ilyen szabályokkal.

Szintén nincs meghatározva, hogy a felhasználó által bevitt adatok érvényesítésének hol kell lennie. Az egyszerű érvényesítések akár nézetben is előfordulhatnak, de ezek gyakoribbak egy vezérlőben vagy modellben.

Az adatok nemzetközivé tétele és formázása szintén nem tartalmaz egyértelmű útmutatást a helyszínre vonatkozóan.

Feltételesen kötelező módosítások

A „Model-View-Controller” séma megvalósításához meglehetősen sok tervezési mintát használnak (az építészeti megoldás összetettségétől függően), amelyek közül a fő a „ megfigyelő ”, „ stratégia ”, „ linker[11 ] .

A legtipikusabb megvalósítás az, amikor a nézetet úgy választják el a modelltől, hogy egy interakciós protokollt hoznak létre közöttük, amely az „eseményapparátust” használja ( a program végrehajtása során felmerülő bizonyos helyzetek „események” általi kijelölése, értesítés küldése mindazoknak, akik feliratkoztak a fogadásra) : A modell belső adatainak minden konkrét változásáról ("eseményként" jelölve) értesíti azokat a tőle függő nézeteket, amelyek feliratkoztak az értesítésre - és a nézet frissítve. Így használatos a " megfigyelő " minta .

A felhasználói reakció feldolgozásakor a nézet a reakciótól függően kiválasztja a kívánt vezérlőt , amely valamilyen kapcsolatot biztosít a modellel. Ehhez a „ stratégiai ” mintát használjuk, vagy helyette a „ parancs ” mintát használjuk .

Az összetett-összetett hierarchikus típusú részobjektumok azonos típusú kezelésének lehetőségéhez a „ linker ” sablon használható . Ezenkívül más tervezési minták is használhatók  - például a " gyári módszer ", amely lehetővé teszi az alapértelmezett vezérlőtípus beállítását a megfelelő nézethez.

Leggyakoribb hibák

A kezdő programozók nagyon gyakran passzív MVC-modellként értelmezik az MVC architektúra modellt: a modell kizárólag az adatok elérésére szolgáló funkciók halmazaként működik, a vezérlő pedig üzleti logikát tartalmaz . Ennek eredményeként a modellkód valójában egy eszköz az adatok DBMS -ből való lekérésére, a vezérlő pedig egy tipikus üzleti logikával megtöltött modul . Ennek a megértésnek köszönhetően az MVC fejlesztői elkezdtek olyan kódot írni, amelyet Padrigue Brady (a Zend Framework közösségi köreiben ismert ) "TTUK"-nak ("Fat Stupid Ugly Controllers"; Fat Stupid Ugly Controllers) írt le:

Az átlagos TTUK egy adatbázisból nyert adatokat (adatbázis-absztrakciós réteget használva, úgy tett, mintha modell lenne), vagy manipulálta, érvényesítette, megírta és átadta az adatokat egy nézetnek. Ez a megközelítés nagyon népszerűvé vált, mert az ilyen vezérlők használata hasonlít a klasszikus gyakorlathoz, amikor az alkalmazás minden oldalához külön php fájlt használnak.

— [ http://blog.astrumfutura.com/2008/12/the-m-in-mvc-why-models-are-misunderstood-and-unappreciated/ Az M az MVC-ben: Miért félreértik és nem értékelik a modelleket

De az objektum-orientált programozásban az aktív [12] MVC modellt használják, ahol a modell nemcsak az adathozzáférési kód és a DBMS kombinációja , hanem a teljes üzleti logika is ; a modellek más modelleket is magukba foglalhatnak . Az adatkezelők az információs rendszer elemeiként csak a következőkért felelősek:

A vezérlő csak ebben az esetben válik „vékonysá”, és kizárólag az információs rendszer egyes komponensei közötti kapcsolat (ragasztóréteg) funkcióját látja el .

Lásd még

Jegyzetek

  1. 1 2 3 4 5 6 Általános Modell-View-Controller, 2007 .
  2. Trygve MH Reenskaug/MVC Archiválva : 2018. április 25. XEROX PARC 1978-79
  3. 1 2 Steve Burbeck. [ http://www.itu.dk/courses/VOP/E2005/VOP2005E/8_mvc_krasner_and_pope.pdf A Model-View-Controller felhasználói felület paradigma leírása a Smalltalk-80 rendszerben]. Archiválva az eredetiből 2010. szeptember 21-én.
  4. 1 2 V. A. Saveliev. Alkalmazások programozása Smalltalk-80™-ban: A Model-View-Controller (MVC) használata .
  5. Szakácskönyv a Smalltalk-80 modellnézet-vezérlő felhasználói felületének használatához Archiválva : 2017. július 15., a Wayback Machine - nél 2017 a Wayback Machine -nél )
  6. Szakácskönyv a Smalltalk-80 modellnézet-vezérlő felhasználói felületének használatához . Letöltve: 2017. január 10. Az eredetiből archiválva : 2017. július 15.
  7. hotframeworks . Letöltve: 2017. január 10. Az eredetiből archiválva : 2017. február 10.
  8. Vermeij. Arjan Egy általános MVC-modell Java nyelven archiválva 2011. október 1-én a Wayback Machine 2004 -ben
  9. Richard Pawson Meztelen tárgyak Archiválva : 2015. október 28. , PhD disszertáció, Dublini Egyetem, Trinity College, 2004
  10. Toni Sellarès, "A Model View Controller: a Composed Pattern." . Letöltve: 2017. augusztus 16. Az eredetiből archiválva : 2017. december 15.
  11. E. Gamma, R. Helm, R. Johnson, J. Vlissides . Objektumorientált tervezés technikái. Tervezési minták archiválva 2011. október 26-án a Wayback Machine 2001 -ben
  12. Általános Modell-View-Controller . Letöltve: 2020. június 17. Az eredetiből archiválva : 2020. február 17.

Irodalom

Linkek