Model-View-Controller

A Model-View-Controller vagy az MVC az 1978-ban elindított grafikus interfészek szoftverarchitektív motívuma , és nagyon népszerű a webes alkalmazások számára . A minta három típusú modulból áll, három különböző felelősséggel: modellek, nézetek és vezérlők.

Ez a minta által használt számos keretek a webes alkalmazások , mint például a Ruby on Rails , Grails , ASP.NET MVC , Spring , Struts , Symfony , Apache Gobelin , Laravel vagy AngularJS .

Történelem

Az MVC mintát Trygve Reenskaug hozta létre 1978- ban a Palo Alto Kutatóközpontban (abr. PARC) tett látogatása során. Az eredeti név a dolog nézet szerkesztő mintája , majd gyorsan átnevezték a modell-nézet-vezérlő mintának . Az MVC mintát először 1980-ban használták grafikus interfészek létrehozására a Smalltalk programozási nyelvvel .

Leírás

Az MVC-kompatibilis alkalmazásnak háromféle modulja van: modellek, nézetek és vezérlők.

Modell Elem, amely tartalmazza az adatokat, valamint az adatokhoz kapcsolódó logikát: érvényesítés, olvasás és rögzítés. Legegyszerűbb formájában csak egyetlen értéket vagy összetettebb adatszerkezetet tartalmazhat. A modell azt az univerzumot képviseli, amelyben az alkalmazás része. Például egy banki alkalmazás esetében a modell számlákat, ügyfeleket és tranzakciókat, például betéteket és felvételeket képvisel, és ellenőrzi, hogy a felvételek nem haladják-e meg a hitelkeretet. Kilátás A grafikus felület látható része . A nézet a modellt használja, és lehet diagram, űrlap, gombok stb. A nézet vizuális elemeket, valamint a modell adatainak megjelenítéséhez szükséges logikát tartalmazza. Egy tipikus asztali alkalmazásban a nézet kérdések feltevésével szerzi be a modell bemutatásához szükséges adatokat. Megfelelő üzenetek küldésével frissítheti a modellt is. Egy webalkalmazásban egy nézet HTML- címkéket tartalmaz . Vezérlő A felhasználói műveleteket feldolgozó, a modellt és az adatokat megtekintő modul.

Függőségek

A modell független a többi modultól. Nem használja a nézetet vagy a vezérlőt, azonban üzeneteket küldhet nekik. Két kapcsolat van a nézet és a modell között: egyrészt a nézet olvassa a modell adatait, másrészt üzeneteket fogad a modelltől. Mivel egy nézet egy modellhez van társítva, és a modell független, ugyanazt a modellt több nézet is felhasználhatja.

A felhasználói felület bemeneti / kimeneti kezelésének szempontjai technikailag nagyon eltérőek és gyenge kölcsönös függőségek vannak. Az inputok kezelése a kontrollerre van delegálva, míg az outputok kezelése a nézet feladata.

A nézet modellfüggő. Megkérdezi, hogy megjelenjen-e egy ábrázolás.

A vezérlő a nézettől és a modelltől függ: a nézet olyan vizuális elemekkel rendelkezik, amelyeket a felhasználó működtethet. A vezérlő reagál a nézeten végrehajtott műveletekre, és módosítja a modell adatait.

Abban az esetben, egy nézet modell , a modell tartalmazza az adatokat, hogy a vezérlő átadja a nézetet. Abban az esetben, a tartomány modell, ez tartalmazza az összes adatot a tevékenységgel kapcsolatos, valamint a logika a adatmódosítás és ellenőrzési folyamatot.

MVP és MVVM

A modell-nézet-bemutató (MVP) és a modell-nézet-nézet modell (MVVM) minták hasonlóak a modell-nézet-vezérlő mintákhoz, néhány különbséggel.

Webes alkalmazásokban

Az MVC mintát a felhasználói felületek megvalósítása céljából hozták létre. Egyes részletek összhangban vannak a Smalltalk nyelvével, de a vázlat bármilyen környezetre alkalmazható. Az e frissítés által indított → frissítés → megjelenítési ciklus jól illeszkedik a webes alkalmazásokhoz. Ezenkívül a főnök előírja az alanyok elkülönítését, és a HTML-címkék így csak a nézetekre korlátozódnak, ami javítja az alkalmazás fenntarthatóságát. Ez a webalkalmazások Ruby on Rails keretrendszere keltette újból az érdeklődést a főnök iránt.

Ezt a mintát számos keretrendszer használja webes alkalmazásokhoz, például a Ruby on Rails , a Django , az ASP.NET MVC , a Spring , a Struts vagy az Apache Tapestry .

Az MVC minta klasszikus megvalósításakor a nézet megvárja a modell változásait, majd megváltoztatja a megfelelő vizuális elemek megjelenítését. Ezt a megvalósítást olyan asztali alkalmazásokra alkalmazzák, amelyek keretrendszerei, például a Swing . A HTTP protokoll nem engedélyezi ezt a megvalósítást webalkalmazásoknál. Ez utóbbi esetében a felhasználói művelet során a nézet tartalmát újraszámítják, majd elküldik az ügyfélnek.

Feldolgozási folyamat

Összefoglalva: amikor az ügyfél kérést küld az alkalmazáshoz:

Előnyök

A modell által nyújtott előny az általa kivitelezett architektúra tisztasága. Ez leegyszerűsíti a fejlesztő azon feladatát, hogy megpróbálja karbantartani vagy javítani a projektet. Valójában a kezelések módosítása nem változtatja meg a nézetet. Például átállhat egy SQL típusú adatbázisról XML-re úgy, hogy egyszerűen megváltoztatja az adatbázissal való interakció-feldolgozást, és ez nem befolyásolja a nézeteket.

Az MVC megmutatja korlátait az alkalmazáskiszolgálókról felépített webes technológiákat alkalmazó alkalmazások összefüggésében . Ezután további rétegeket vezetnek be, valamint a vezérlés inverziójának és a függőségek injektálásának mechanizmusait .

Különbség a háromrétegű architektúrában (3-rétegű)

A háromlépcsős (3-szintes) architektúra egy réteges modell, vagyis minden réteg csak a szomszédos rétegeivel (felső és alsó) kommunikál, és a vezérlés áramlása a rendszeren felülről lefelé folyik. A felső rétegek vezérlik az alsó rétegeket, vagyis a felső rétegek mindig az interakció forrásai (kliensek), míg az alsó rétegek csak a kérésekre válaszolnak (szerverek).

Az MVC modellben általánosan elfogadott, hogy a nézet közvetlenül a modellhez (olvasáshoz) hozzáférhet, anélkül, hogy a vezérlőn átmenne. Másrészt szükségszerűen át kell mennie a vezérlőn, hogy módosítson (írjon). Itt a vezérlés folyamata megfordul a réteges modelltől, ekkor a vezérlő kéréseket küldhet minden nézetre, hogy azok frissüljenek.

A háromrétegű architektúrában, ha egy nézet megváltoztatja az adatokat, minden, a változás által érintett nézetet frissíteni kell, ezért hasznos az MVC használata a prezentációs rétegben. A bemutató réteg tehát lehetővé teszi az „X nézetek frissítése, ha Y vagy Z módosul” típusú szabályokat. De ezek a szabályok gyorsan túl soká és kezelhetetlenné válnak, ha a logikai kapcsolatok túl magasak. Ebben az esetben a nézetek egyszerű frissítése rendszeres időközönként könnyedén leküzdheti ezt a problémát. Ez a háromszintű architektúrában is a legelterjedtebb megoldás, az MVC használata modern és még mindig marginális.

Példák az MVC architektúrára

Az ASP.NET-ben

C ++ - ban

JavaScript-ben

A TypeScriptben

Az ECMAScript-ben

Groovy-ban

Java-ban

A C-objektívben

Perl

Weborientált keretrendszerek a Perl-ben  :

PHP-ben

MVC architektúrán alapuló keretek :

A Keretrendszer használata nem kötelező.

Pythonban

A Ruby-ban

Lásd is

Megjegyzések és hivatkozások

  1. (en) Stephen Walther, ASP.NET MVC Framework Unleashed , Sams Publishing - 2009, ( ISBN  9780768689785 )
  2. (en) Adam Freeman és Steven Sanderson, Pro ASP.NET MVC 3 Framework , Apress - 2011, ( ISBN  9781430234043 )
  3. (en) Joey Lott és Danny Patterson, Advanced ActionScript tervezési mintákkal , Adobe Press - 2007, ( ISBN  9780132701372 )
  4. „  MODELLEK - NÉZETEK - VEZÉRLŐK  ” , a http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html oldalon ,1979. december 10
  5. „  A modell-nézet-vezérlő (MVC) múltja és jelene  ” , a következő címen: http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html ,2003. augusztus 20
  6. (en) John Ciliberti, ASP.NET MVC 4 receptek: probléma-megoldás megközelítés , Berkeley, Apress,2013, 632  p. ( ISBN  978-1-4302-4774-6 , online olvasás )
  7. (en) Colin Yates - Seth Ladd - Marten Deinum - Koen Serneels és Christophe Vanfleteren, Pro Spring MVC: Web Flow-val , Apress - 2012, ( ISBN  9781430241553 )
  8. (in) Fabien Potencier, Mi a függőség Injection?  » , 2009. március 26.
  9. http://blog.nalis.fr/index.php?post/2009/10/19/Architecture-%3A-Le-Design-Pattern-MVC-en-PHP példa az MVC megvalósítására a PHP-ben]