A modellnézet vezérlője

A modell-nézet-vezérlő (MVC, "Model-view-behavior", "Model-view-controller") több tervezési mintázat használatát mutatja be. amellyel az alkalmazási adatmodell, a felhasználói felület és a felhasználói interakció három különálló összetevőre osztható, így az egyik komponens módosítása minimális hatást gyakorol a többiekre. Ezt a tervezési mintát gyakran építik fel egy építészeti keret, amikor elméletről a megvalósításra költözik egy adott tématerületen [1].

Az MVC koncepciót 1979-ben írta le [2] Trygve Reenskaug, majd a Smalltalk programozási nyelvén dolgozik a Xerox PARC-ben. Az eredeti megvalósítást az "Alkalmazások programozása a Smalltalk-80-ban: A Model-View-Controller használata" című cikk írja le [3]. Ezután Jim Altoff és a fejlesztőcsapat végre hajtotta az MVC verziót a Smalltalk-80 osztálykönyvtár számára.

Az eredeti koncepcióban a modell, a reprezentáció és a vezérlő egyes elemeinek ötletét és szerepét írta le. De a köztük lévő kapcsolatokat leírás nélkül írta le. Emellett két fő módosítás történt:

  1. Passzív modell - a modellnek nincs módja befolyásolni a nézetet vagy a vezérlőt, és a megjelenítés adatforrásaként használja őket. A modell minden módosítását a vezérlő figyeli, és szükség esetén át kell dolgoznia a nézetet. Az ilyen modellt gyakrabban használják a strukturális programozásban. mivel ebben az esetben a modell egyszerűen egy adatszerkezet, a feldolgozás módja nélkül.
  2. Az aktív modell - a modell értesíti azt az elképzelést, hogy benne vannak változások, és az értesítésben érdekelt reprezentációk feliratkoznak ezekre az üzenetekre. Ez lehetővé teszi, hogy megőrizze a modell függetlenségét mind a vezérlőről, mind a bemutatóról.

Az MVC koncepció klasszikus megvalósítását az aktív modell változatának tekintjük.

kinevezés

Ennek a koncepciónak a fő célja az, hogy az üzleti logikát (modellt) a vizualizációból (nézetkép) képviselje. Ez a felosztás növeli az újrafelhasználás lehetőségét. Ennek a koncepciónak a leghasznosabb alkalmazása, amikor a felhasználónak ugyanazokat az adatokat egyszerre kell látnia különböző kontextusokban és / vagy különböző perspektívákból. Különösen a következő feladatokat végzik el:

  1. Számos modell csatolható egy modellhez. miközben nem befolyásolja a modell végrehajtását. Például egyes adatokat egyidejűleg táblázatkezelő, hisztogram és kördiagram formájában lehet megjeleníteni.
  2. Anélkül, hogy befolyásolná a fajok végrehajtását. megváltoztathatja a felhasználói műveletekre adott válasz (a gomb megnyomásával, az adatok bevitelével), elég egy másik vezérlő használata.
  3. Számos fejlesztő csak egy területen szakosodott: vagy grafikus interfészt fejlesztenek, vagy üzleti logikát fejlesztenek. Ezért biztos lehet abban, hogy az üzleti logika (modellek) fejlesztőjével foglalkozó programozók általában nem tudják, hogy milyen bemutatókat fognak használni.

Az MVC koncepció lehetővé teszi az adatok megosztását, a felhasználói műveletek megjelenítését és feldolgozását három külön összetevőre:

  • Modell (angol modell). A modell biztosítja a tudást: adatokkal és módszerekkel dolgozik ezekkel az adatokkal, reagál a kérésekre, megváltoztatja az állapotát. Nem tartalmaz információkat arról, hogyan lehet ezt a tudást megjeleníteni.
  • Képviselete. nézet (angol nézet). Az információ megjelenítéséért felelős (megjelenítés). Gyakran a grafikus elemekkel rendelkező nézet (ablak) reprezentációként működik.
  • Controller (Engl. Controller). Biztosítja a kommunikációt a felhasználó és a rendszer között: vezérli az adatok bevitelét a felhasználó által, és a modellt és a prezentációt használja a szükséges reakció megvalósításához.

Fontos megjegyezni, hogy ez képviselet. Mind a vezérlő, mind a vezérlő a modelltől függ. A modell azonban nem függ a reprezentációtól. sem az adatkezelőtől. Így megvalósul az elválasztás célja: lehetővé teszi, hogy a vizuális ábrázolástól függetlenül modellt építsen. és egynél több nézetet is létrehozhat egy modell számára.

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

Leggyakoribb hibák

A programozók kezdete (különösen a webes programozásban, ahol az MVC rövidítése népszerűvé vált) nagyon gyakran az MVC építészeti modellt passzív MVC modellként kezeli. Ebben az esetben a modell kizárólag az adatokhoz való hozzáférés funkcióként működik, és a vezérlő üzleti logikát tartalmaz. Ennek eredményeképpen a modell kód valójában eszköz a DBMS adatainak megszerzéséhez. és a vezérlő tipikus modul az üzleti logikával, vagy egy szkript a webes programozás terminológiájában. Az MVC megértésének eredményeképpen a fejlesztők olyan kódot kezdtek írni, amelyet Pádraic Brady, a Zend Framework közösségi körzetében ismert, TTUK-nak nevezik: "Fat-Stupid Ugly Controllers" [6]:

Az átlagos TTUK adatokat kapott az adatbázisból (az adatbázis absztrakciós réteget használva, mint modellnek), vagy manipulálta, validálta, rögzítette és továbbította az adatokat a nézethez. Ez a megközelítés nagyon népszerűvé vált, mert az ilyen vezérlők használata hasonló ahhoz a klasszikus gyakorlathoz, hogy különálló php-fájlt használnak az alkalmazás minden oldalára.

De az objektumorientált programozásnál az aktív MVC modellt használják, ahol a modell nem csak egy adatkód-kód és egy DBMS, hanem minden üzleti logika. A szabályozók viszont csak a rendszer elemei, amelyek azonnali feladatai közé tartoznak a kérelem adatainak átvétele és a rendszer más elemeire történő átvitelük. Csak ebben az esetben a szabályozó "vékony" lesz, és csak a ragasztóréteg funkcióját végzi el a rendszer egyes alkatrészei között.

Példa egy MVC vezérlőre a PHP5-ben

Kezdetben a getView () vezérlési módszer használatával a programozó olyan View objektumot kap, amely a Nézethez specifikus módszereket hív: a loadI18n () metódus, amellyel a nemzetköziesítési fájlok betöltődnek a Nézetbe. és az initTitle () metódust. A HTML-oldal címének megalkotása a nemzetközivé váló fájlok elemzése során kapott adatok alapján.

Ezután a vezérlő checkAccess () módjával ellenőrzi, hogy a felhasználó hozzáfér-e ehhez az oldalhoz. Ha a hozzáférés nem engedélyezett, figyelmeztetés generálódik, és az "/ admin /" erőforrásra való átirányítás történik. Ezután a modell példányos, vagy inkább a modell egyik összetevője a Krugozor_Module_Advert_Service_List szolgáltatás. Ez az osztály magába foglalja azt a logikát, hogy a Request objektum különböző paramétereitől függően különböző modell objektumokat kapjon. és együttműködik a lapozással.

A példa világosan mutatja, hogy a vezérlő a rendszer két fő összetevője - a modell és a nézet - közötti kapcsolat. A modell nem tud semmit a bemutatásról, és az ellenőr nem tartalmaz üzleti logikát.

jegyzetek

irodalom

  • A Wikiforrás anyagai a vizualizáció és az üzleti logika elkülönítésével foglalkoznak
  • Szergej Berdachuk. Eclipse RCP. Fájlkezelő
  • Model-View-Controller a .Net-ben
  • Általánosított modell-nézet-vezérlő
  • MVC hármas akcióban
  • MVC kezdőknek
  • Beágyazott alkalmazások fejlesztése az eSWT használatával