Conceptul de MVC (Model-View-Controller: Model-View-Controller) este foarte des menționată în lumea de programare web, în ultimii ani. Oricine a avut vreodată ceva de a face cu dezvoltarea de aplicații web, într-un fel sau altul se confruntă cu acest acronim. Astăzi ne vom uita la ceea ce - conceptul MVC, și de ce a devenit popular.
istoria antica
MVC - nu este un șablon de proiect, acesta este un model structural care descrie o metodă de construcție a structurii aplicației noastre, responsabilitățile și interacțiunea fiecăreia dintre părți în această structură.
Acesta a fost descris pentru prima dată în 1979, desigur, pentru alt mediu. Apoi, nu a existat nici un concept de aplicații web. Tim Berners Lee (Tim Berners Lee) a semănat semințele de World Wide Web (WWW) la începutul anilor nouăzeci și a schimbat lumea pentru totdeauna. Șablonul pe care le folosim astăzi, este o adaptare a modelului original, pentru dezvoltare web.
Popularitatea turbată a acestei structuri în aplicațiile web dezvoltate, datorită includerii sale în două medii de dezvoltare, care au devenit foarte populare: lonjeroane și Ruby on Rails. Aceste două medii de dezvoltare, a subliniat modalitățile de dezvoltare a sute de medii de lucru create mai târziu.
MVC pentru aplicații web
Ideea care stă la baza șablonul structural MVC este foarte simplu: trebuie să împartă în mod clar responsabilitatea pentru operare diferite în aplicațiile noastre:
Aplicația este împărțit în trei componente principale, fiecare dintre acestea fiind responsabile pentru diferite sarcini. Să vedem exact componentele exemplu.
Un controler (Controller)
Controlerul controlează cererile utilizatorului (primite ca cereri HTTP POST GET sau, atunci când utilizatorul apasă elementele de interfață de utilizator pentru a efectua diferite acțiuni). Funcția sa principală - pentru a apela și de a coordona acțiunea resurselor necesare și facilitățile necesare pentru a efectua acțiunile specificate de utilizator. De obicei, controlorul determină modelul potrivit pentru o sarcină și selectează un tip adecvat.
Model (model)
vedere din modelul controlorului furnizează datele pe care utilizatorul a solicitat (mesajul paginii de carte, album foto, etc). Modelul de date va fi aceeași, indiferent de modul în care dorim să le prezinte pentru utilizator. Prin urmare, vom alege oricare dintre punctele de vedere disponibile pentru a afișa date.
Modelul conține cea mai importantă parte a logicii logicii aplicației care rezolvă problema cu care ne preocupă (forum, magazin, banca, etc). Controlerul conține logica organizatorică de bază pentru aplicație (foarte similar cu menaj).
View (Vizualizare)
Tipul oferă diferite modalități de prezentare a datelor, care sunt derivate din modelul. Acesta poate fi un șablon care este populat cu date. Pot exista mai multe tipuri diferite, și selectează controler care se potrivește cel mai bine pentru situația actuală.
aplicatie web de obicei constă dintr-un set de controlere, modele și tipuri. Controlerul poate fi aranjat ca un miez, care primește toate cererile și pot provoca alte controlere pentru a efectua acțiuni în funcție de situație.
Să examinăm exemplul
Avem un controler specific să se ocupe de toate activitățile legate de cărți (vizualizare, edita, crea, și așa mai departe). Să-l numim books_controller.php în exemplul nostru. De asemenea, avem nevoie de un model, de exemplu, book_model.php. care procesează datele și logica asociată cu poziția în magazin. În concluzie, trebuie să reprezinte mai multe tipuri de date, cum ar fi o listă de cărți, o pagină pentru editare, și așa mai departe.
Controlerul (books_controller.php) primește interogarea utilizatorului [1] (HTTP GET sau POST cerere). Putem aranja un controler central, de exemplu, index.php, care primește cererea și solicită books_controller.php.
Controlerul verifică cererea și parametrii, și apoi solicită modelul (book_model.php), solicitând lista ei de cărți disponibile pe fantezie [2].
Modelul primeste date din baza de date (sau dintr-o altă sursă, în care informațiile stocate) [3], se aplică logica și filtrele necesare, iar apoi returnează datele care reprezintă o listă de cărți [4].
Care sunt avantajele?
Cel mai evident avantaj pe care le primim de la utilizarea conceptului MVC - este o separare clară a logicii de prezentare (UI) și logica aplicației.
În plus față de izolarea speciilor din logica de aplicare, conceptul MVC reduce semnificativ complexitatea aplicațiilor mari. Codul este un mult mai structurat, și astfel facilitar soluții de sprijin, testare și re-utilizare.
Și de ce folosesc mediul de lucru?
Când utilizați un spațiu de lucru, structura de bază MVC a fost deja pregătit, și puteți extinde numai structura prin plasarea fișierele în directoarele corespunzătoare pentru a se potrivi cu modelul MVC. În plus, veți avea un set de funcții care sunt deja scrise și bine testate.
Să considerăm CakePHP ca fluid din exemplul MVC de lucru. După instalare, va avea trei directoare principale:
App dosarul este în cazul în care vă plasați fișierele. Este un loc pentru a dezvolta partea ta a cererii.
Dosarul tort plasat fișiere CakePHP (de lucru funcționalitate de mediu).
dosar vânzătorii este utilizat pentru a stoca biblioteca PHP terță parte.
spațiului de lucru (directorul app) dvs. are următoarea structură:
Ai nevoie să plasați controlorii dvs. în directorul controlere. modelul în directorul modele și tipul în directorul vederi.
De îndată ce începe să utilizați mediul de lucru, devine imediat clar, care găzduiește aproape fiecare parte a cererii dumneavoastră, trebuie să creați sau să modificați. O astfel de organizație se simplifică foarte mult procesul de dezvoltare și sprijinirea aplicațiilor.
Utilizarea mediului de lucru pentru exemplul nostru
Amintiți-vă, ne-am uitat la librărie și utilizatorii curioși care au dorit să vadă lista completă de cărți pe tema fantezie. Controlerul primește cererea utilizatorului și să coordoneze acțiunile necesare.
Deci, de îndată ce utilizatorul face clic pe butonul, browser-ul cere acest URL:
CakePHP formate URL model / controler / acțiune / param1 / param2. în cazul în care acțiunea - este o funcție care este numit de către operator. In vechea forma URL-ul clasic va arata astfel:
controlor
Într-un mediu de producție CakePHP, controlerul nostru va arăta astfel:
Simplu, nu-i așa. Acest regulator va fi stocat ca books_controller.php și plasate în / app / controlere. Acesta conține o listă de funcții care realizează o acțiune de exemplul nostru, și alte funcții pentru a efectua operațiuni asociate cu cărți (pentru a adăuga o carte nouă pentru a elimina o carte, și așa mai departe).
Mediul de lucru ne oferă o mulțime de soluții gata făcute, și au nevoie doar pentru a crea o listă de cărți. Există o clasă de bază, care este deja definită funcțiile de bază ale operatorului, astfel încât este necesar să moștenească proprietățile și funcțiile acestei clase (AppController este succesorul lui Controller).
Tot ce trebuie să faceți în lista de acțiune - model de cauză pentru a obține datele, și apoi alegeți tipul de reprezentare pentru utilizator. Iată cum se face.
this-> Book - acesta este modelul nostru, și o parte din codul:
Conform modelului, aveți nevoie pentru a reveni lista tuturor cărților pe tema aleasă (considerăm un model mai târziu).
set metoda în șir:
Controlerul transmite datele medie. Cărțile disparați preia datele returnate de model, iar acestea sunt disponibile pentru speciile.
Acum putem afișa doar un punct de vedere, dar această funcție este realizată automat CakePHP, dacă utilizați vizualizarea implicită. Dacă vrem să utilizați un alt tip, este necesar să invocați în mod explicit metoda de randare.
Modelul chiar mai ușor:
De ce este goală? Deoarece este succesorul clasei de bază care asigură funcționalitatea aveți nevoie și trebuie să folosim convențiile de denumire în CakePHP la un mediu de producție este de toate celelalte sarcini în mod automat. De exemplu, CakePHP cunoscut sub numele pe care modelul utilizat în BooksController. și că are acces la cărțile de masă de bază de date cu numele.
Codul este stocat ca book.php în dosarul / app / modele.
Tot ce trebuie să facem acum - este de a crea o formă (cel puțin unul) pentru lista de acțiune. View va fi codul HTML și unele (cât mai puțin posibil) linii de cod PHP la bucla prin matrice de cărți care oferă un model.
Salvați opinia ca list.ctp (lista - acesta este numele de acțiune, și mijloace CakePHP șablon CTP) în dosarul / app / vederi / cărți (pentru că este un fel de acțiune pentru controller).
Asta pentru ca toate cele trei componente sunt realizate folosind mediul de lucru CakePHP!
Unicom, deoarece este cu siguranta nivel mai ridicat de dezvoltare, și are nevoie de încă tufișurile;)! Care utilizează conceptul de ea, Dmitriy_chelios, iar aceasta arhitectura software, la rândul său, folosește acest concept. Citat din Wikipedia: „Sfârșitul # 769; ptsiya, sau la sfârșitul # 769; pt (. Lat conceptio - înțelegere a sistemului) - un anumit mod de înțelegere (interpretare) a unui obiect, fenomen sau proces, principalul punct de vedere pe această temă; ideea de ghidare pentru acoperirea lor sistematică ". Și la rândul lor: cadre, cum ar fi RubyOnRails, Django, etc., folosind această arhitectură!
Nu este clar când și în cazul în care este format dintr-o serie de cărți, care este de ieșire de la video. Controler Într-o metodă de clasa descrisă. Acolo unde Souza obiect, și în cazul în care metoda de mai sus i se aplică?
Prin obținerea de informații de la două canale (vedere si auz) eficacitatea instruirii de învățare departe superioare de cărți. O temele pentru acasă și teste on-line vă va permite să se gândească în mod constant în limba țintă și imediat verifica cunoștințele!
Dacă doriți o lungă perioadă de timp pentru a studia modul în HTML, mi-ai, pentru ai vesti bune!
Dacă ați învățat deja HTML și doresc să avanseze, următorul pas va fi de a studia tehnologia CSS.
Dacă doriți să înțeleagă conceptele de domeniu si hosting, învață cum să creeze o bază de date, încărca fișiere pe un site web prin intermediul unui server FTP, crea subdomenii, configurați cutiile poștale pentru site-ul și să monitorizeze participarea, acest curs este conceput special pentru tine!