Model-View-Controller

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 14 februarie 2022; verificările necesită 12 modificări .
Model-View-Controller
Engleză  Model-View-Controller
Structura
  • Model
  • Controlor
  • Performanţă
Descris în Design Patterns Nu

Model-View-Controller ( MVC , "Model-View-Controller", "Model-View-Controller") este o schemă pentru separarea datelor aplicației și a logicii de control în trei componente separate: model, vedere și controler - astfel încât modificarea fiecare componentă poate fi realizată independent [1] .

Istorie

Conceptul de MVC a fost descris de Trygve Reenskaug în 1978 [1] [2] , care lucra la centrul de cercetare Xerox PARC pe limbajul de programare Smalltalk . Mai târziu, Steve Burbeck a implementat modelul în Smalltalk-80 [1] [3] [4] .

Versiunea finală a conceptului MVC a fost publicată abia în 1988 în revista Technology Object [5] .

Ulterior, modelul de design a început să evolueze. De exemplu, a fost introdusă o versiune ierarhică a HMVC ; MVA , MVVM [6] [3] [4] .

O nouă rundă de popularitate a fost adusă de dezvoltarea cadrelor de implementare rapidă în Python , PHP și Ruby : Django , Laravel și , respectiv, Ruby on Rails . La momentul anului 2017, cadrele cu MVC au ocupat o poziție proeminentă în raport cu alte cadre fără acest model [7] .

Diferențele de descriere a conceptului șablonului

Odată cu dezvoltarea programării orientate pe obiecte și a conceptului de modele de proiectare  , au fost create o serie de modificări ale conceptului MVC, care, atunci când sunt implementate de diferiți autori, pot diferi de original. Deci, de exemplu, Erian Vermi în 2004 a descris un exemplu de MVC generalizat [8] .

În prefața disertației lui Richard Pawson „ Obiecte goale ”, Trygve Reenskaug menționează cea mai veche versiune nepublicată a MVC, conform căreia [9] :

Numire

Scopul principal al aplicării acestui concept este de a separa logica afacerii ( modelul ) de vizualizarea acesteia ( vedere , vizualizare ). Datorită acestei separări, crește posibilitatea reutilizarii codului . Acest concept este cel mai util atunci când utilizatorul trebuie să vadă aceleași date în același timp în contexte diferite și/sau din puncte de vedere diferite. În special, sunt îndeplinite următoarele sarcini:

  1. Puteți atașa mai multe vederi la același model fără a afecta implementarea modelului . De exemplu, unele date pot fi prezentate ca o foaie de calcul , o diagramă cu bare și o diagramă circulară în același timp ;
  2. Fără a afecta implementarea vizualizărilor , puteți modifica reacțiile la acțiunile utilizatorului (făcând clic pe un buton, introducerea datelor) - pentru aceasta este suficient să utilizați un controler diferit ;
  3. O serie de dezvoltatori se specializează doar într-unul dintre domenii: fie dezvoltarea unei interfețe grafice , fie dezvoltarea logicii de afaceri . Prin urmare, este posibil să ne asigurăm că programatorii implicați în dezvoltarea logicii de afaceri ( modele ) nu vor fi conștienți de ce reprezentare va fi folosită deloc.

Concept

Conceptul MVC vă permite să separați modelul, vizualizarea și controlerul în trei componente separate:

Model

Modelul oferă date și metode de lucru cu acestea: interogări la baza de date, verificarea corectitudinii. Modelul este independent de vizualizare (nu știe cum să redeze datele) și de controler (nu are puncte de interacțiune cu utilizatorul), oferind doar acces și manipulare a datelor.

Modelul este construit în așa fel încât să răspundă solicitărilor prin schimbarea stării sale, iar notificarea „ observatorilor ” poate fi încorporată .

Modelul, datorită independenței față de reprezentarea vizuală, poate avea mai multe reprezentări diferite pentru un „model”

Prezentare

Vizualizarea este responsabilă pentru obținerea datelor necesare din model și trimiterea acestora către utilizator. Vizualizarea nu procesează intrarea utilizatorului [10] .

Controller

Controlerul asigură „comunicarea” între utilizator și sistem. Controlează și direcționează datele de la utilizator către sistem și invers. Utilizează un model și o vedere pentru a implementa acțiunea dorită.

Funcționalitate și discrepanțe

Deoarece MVC nu are o implementare strictă, poate fi implementat în moduri diferite. Nu există o definiție general acceptată a locului în care ar trebui să fie localizată logica de afaceri. Poate fi atât în ​​controler, cât și în model. În acest din urmă caz, modelul va conține toate obiectele de afaceri cu toate datele și funcțiile.

Unele cadre definesc în mod rigid unde ar trebui plasată logica de afaceri, altele nu au astfel de reguli.

De asemenea, nu este specificat unde ar trebui să fie localizată validarea datelor introduse de utilizator. Validările simple pot apărea chiar și într-o vizualizare, dar sunt mai frecvente într-un controler sau model.

De asemenea, internaționalizarea și formatarea datelor nu dispun de o îndrumare clară privind locația.

Modificări obligatorii condiționat

Pentru a implementa schema „Model-View-Controller”, se utilizează un număr destul de mare de modele de proiectare (în funcție de complexitatea soluției arhitecturale), dintre care principalele sunt „ observator ”, „ strategie ”, „ linker[11]. ] .

Cea mai tipică implementare este cea în care vederea este separată de model prin stabilirea unui protocol de interacțiune între ele care utilizează „aparatul de evenimente” (desemnarea prin „evenimente” a anumitor situații care apar în timpul execuției programului și trimiterea de notificări despre le-o tuturor celor care s-au abonat pentru a primi): pentru fiecare modificare specifică a datelor interne din model (notate ca „eveniment”), notifică acele vizualizări care depind de el care sunt abonate pentru a primi o astfel de notificare - iar vizualizarea este la curent. Acesta este modul în care este folosit modelul „ observator ” .

La procesarea reacției utilizatorului, vizualizarea selectează, în funcție de reacție, controlerul dorit , care va asigura una sau alta conexiune cu modelul. Pentru aceasta, se folosește modelul „ strategie ” sau poate exista o modificare folosind în schimb modelul „ comandă ” .

Pentru posibilitatea aceluiași tip de manipulare a subobiectelor de tip ierarhic complex-compozit, se poate folosi șablonul „ linker ” . În plus, pot fi utilizate și alte modele de design  - de exemplu, „ metoda din fabrică ”, care vă va permite să setați tipul de controler implicit pentru vizualizarea corespunzătoare.

Cele mai frecvente greșeli

Programatorii începători interpretează foarte des modelul arhitectural MVC ca un model MVC pasiv: modelul acționează numai ca un set de funcții pentru accesarea datelor, iar controlerul conține logica de afaceri . Ca rezultat, codul modelului este de fapt un mijloc de obținere a datelor din DBMS , iar controlerul este un modul tipic plin cu logica de afaceri. Ca urmare a acestei înțelegeri, dezvoltatorii MVC au început să scrie cod pe care Padrigue Brady (cunoscut în cercurile comunității Zend Framework ) l-a descris drept „TTUK” („Fat Stupid Ugly Controllers”; Fat Stupid Ugly Controllers):

TTUK obișnuit a obținut date dintr-o bază de date (folosind un strat de abstractizare a bazei de date, pretinzând că este un model) sau a manipulat, validat, scrierea și transmiterea datelor către o vizualizare. Această abordare a devenit foarte populară deoarece utilizarea unor astfel de controlere este similară cu practica clasică de a folosi un fișier php separat pentru fiecare pagină a aplicației.

— [ http://blog.astrumfutura.com/2008/12/the-m-in-mvc-why-models-are-misunderstood-and-unappreciated/ M în MVC: De ce modelele sunt greșit înțelese și neapreciate

Dar în programarea orientată pe obiecte se folosește modelul activ [12] MVC, unde modelul nu este doar o combinație de cod de acces la date și DBMS , ci și întreaga logică de afaceri ; modelele pot, de asemenea, să încapsuleze alte modele în sine. Controlorii, ca elemente ale unui sistem informatic , sunt responsabili doar pentru:

Numai în acest caz, controlerul devine „subțire” și îndeplinește exclusiv funcția de legătură (strat de adeziv) între componentele individuale ale sistemului informațional .

Vezi și

Note

  1. 1 2 3 4 5 6 Generic Model-View-Controller, 2007 .
  2. Trygve MH Reenskaug/MVC Arhivat 25 aprilie 2018. XEROX PARC 1978-79
  3. 1 2 Steve Burbeck. [ http://www.itu.dk/courses/VOP/E2005/VOP2005E/8_mvc_krasner_and_pope.pdf O descriere a paradigmei interfeței utilizator Model-View-Controller în sistemul Smalltalk-80]. Arhivat din original pe 21 septembrie 2010.
  4. 1 2 V. A. Saveliev. Aplicații de programare în Smalltalk-80™: Cum să utilizați model-View-Controller (MVC) .
  5. O carte de bucate pentru utilizarea paradigmei interfeței de utilizator a controlerului de vizualizare model în Smalltalk-80 Arhivat 15 iulie 2017 la Wayback Machine , A Description of the Model-View-Controller User Interface Paradigm in the Smalltalk -80 System Arhivat 7 august, 2017 la Wayback Machine )
  6. O carte de bucate pentru utilizarea paradigmei interfeței cu utilizatorul controlerului de vizualizare model în Smalltalk-80 . Consultat la 10 ianuarie 2017. Arhivat din original la 15 iulie 2017.
  7. hotframeworks . Preluat la 10 ianuarie 2017. Arhivat din original la 10 februarie 2017.
  8. Vermeij. Arjan Un model MVC generic în Java Arhivat la 1 octombrie 2011 la Wayback Machine 2004
  9. Richard Pawson Naked objects Arhivat 28 octombrie 2015. , teză de doctorat, Universitatea din Dublin, Trinity College, 2004
  10. Toni Sellarès, „The Model View Controller: a Composed Pattern”. . Preluat la 16 august 2017. Arhivat din original la 15 decembrie 2017.
  11. E. Gamma, R. Helm, R. Johnson, J. Vlissides . Tehnici de proiectare orientată pe obiecte. Modele de design Arhivat la 26 octombrie 2011 la Wayback Machine 2001
  12. Generic Model-View-Controller . Preluat la 17 iunie 2020. Arhivat din original la 17 februarie 2020.

Literatură

Link -uri