Un ghid pentru începători pentru arhitectura MVC în Java

Publicat: 2018-04-10

Dacă sunteți legat de scena dezvoltării web, cu siguranță veți fi întâlnit cu acronimul „MVC” de sute de ori, dacă nu de mai multe ori. MVC este unul dintre cele mai discutate modele de design în lumea programării web de astăzi, și pe bună dreptate. În acest articol, vă vom duce prin lumea arhitecturii MVC. Vom vorbi despre elementele de bază ale MVC, avantajele sale și, în final, un cod simplu care vă va ajuta să înțelegeți implementarea MVC în Java într-un mod mai clar.

Cuprins

Ce este mai exact arhitectura MVC?

Înainte de a intra în aspectele tehnice ale acestuia, să clarificăm câteva lucruri – MVC NU este un model de design, este o modalitate de a vă structura aplicațiile. În ultimii ani, aplicațiile web folosesc pe scară largă arhitectura MVC și, prin urmare, este firesc să o confundăm cu un model de design exclusiv pentru aplicațiile web. Cu toate acestea, să vă spunem că MVC a fost descris pentru prima dată în 1979 – înainte de era WWW, când nu exista conceptul de aplicații web. Arhitectura folosită astăzi pentru aplicațiile web este o adaptare a modelului original.
De fapt, această arhitectură a fost inclusă inițial în cele două cadre majore de dezvoltare web – Struts și Ruby on Rails. Aceste două medii au deschis calea pentru majoritatea cadrelor web care au apărut mai târziu – și astfel popularitatea acestei arhitecturi a continuat să crească.

Învață să construiești aplicații precum Swiggy, Quora, IMDB și multe altele

Modelul arhitectural MVC urmează o idee elementară – trebuie să separăm responsabilitățile în orice aplicație pe următoarele baze:

  • Model: Gestionează datele și logica de afaceri.
  • Vizualizare: Prezintă datele utilizatorului ori de câte ori este solicitat.
  • Controller: Distrează cererile utilizatorilor și preia resursele necesare.

Fiecare dintre componente are un set delimitat de sarcini care asigură buna funcționare a întregii aplicații împreună cu modularitatea completă. Să aruncăm o privire la fiecare dintre aceste componente în detaliu.

Controlor

Controlerul este la fel ca menajera aplicației – realizează coordonarea între model și vizualizare pentru a satisface o solicitare a utilizatorului. Solicitările utilizatorului sunt primite ca HTTP get sau post request – de exemplu, atunci când utilizatorul face clic pe orice element GUI pentru a efectua orice acțiune.
Funcția principală a unui controler este să apeleze și să se coordoneze cu modelul pentru a prelua orice resurse necesare necesare pentru a acționa. De obicei, la primirea unei cereri de utilizator, controlorul apelează modelul potrivit pentru sarcina în cauză.

Model

Modelul este pur și simplu datele pentru aplicația noastră. Datele sunt „modelate” într-un mod ușor de stocat, preluat și editat. Modelul este modul în care aplicăm regulile datelor noastre, care în cele din urmă reprezintă conceptele pe care le gestionează aplicația noastră.
Pentru orice aplicație software, totul este modelat ca date care pot fi gestionate cu ușurință. Ce este un utilizator, o carte sau un mesaj pentru o aplicație? Nimic cu adevărat, doar date care trebuie prelucrate conform unor reguli specifice. De exemplu, data nu trebuie să fie mai mare decât data curentă, e-mailul trebuie să fie în formatul corect, numele nu trebuie să aibă mai mult de „x” caractere, etc.

Ori de câte ori un utilizator face orice solicitare din partea operatorului, acesta contactează modelul corespunzător care returnează o reprezentare a datelor a ceea ce a solicitat utilizatorul. Acest model va fi același pentru o anumită lucrare, indiferent de modul în care dorim să o afișam utilizatorului. De aceea, putem alege orice vizualizare disponibilă pentru a reda datele modelului.
În plus, un model conține, de asemenea, logica pentru a actualiza controlerul relevant ori de câte ori există vreo modificare a datelor modelului.

Vedere

După cum sugerează și numele, vizualizarea este responsabilă pentru redarea datelor primite de la model. Pot exista șabloane pre-proiectate în care puteți potrivi datele și pot exista chiar mai multe vederi diferite per model, în funcție de cerințe.

Orice aplicație web este structurată ținând cont de aceste trei componente de bază. Poate exista un controlor principal care este responsabil pentru primirea tuturor solicitărilor și apelarea controlorului specific pentru acțiuni specifice. Să înțelegem mai bine funcționarea unei aplicații web sub arhitectura MVC folosind un exemplu.

Să vedem un exemplu

Să luăm un exemplu de magazin de papetărie online. Utilizatorul poate vizualiza articole, cumpăra, adăuga articole în coș, poate adăuga articole la comanda curentă sau chiar poate adăuga/elimina articole (dacă el este administrator).
Acum, să vedem ce se va întâmpla când un utilizator face clic pe titlul „Pixuri” pentru a vedea lista de stilouri.
Aplicația noastră va avea un controler special pentru a gestiona toate întrebările legate de stilouri. Să presupunem că se numește „pens_controller.php”. Vom avea și un model care va stoca datele referitoare la pixurile pe care le avem – să-i spunem „pens_model.php”. În cele din urmă, vom avea mai multe vizualizări pentru a prezenta datele – o listă de pixuri, un tabel care afișează pixuri, o pagină pentru a edita lista etc.
Următoarea figură arată fluxul complet de control chiar din momentul în care utilizatorul face clic pe „pixuri”, până când rezultatul este redat în fața lui:

În primul rând, „pens_controller.php” gestionează cererea utilizatorului (1) ca o solicitare GET sau POST. De asemenea, putem avea un „index.php” care este controlerul central care va apela „pens_controller” ori de câte ori este nevoie.
Controlerul examinează apoi cererea și parametrii și apelează modelul necesar – în acest caz, „pens_model.php”. Controlerul cere modelului să returneze lista de stilouri disponibile (2).
Acum, modelul caută în baza de date informațiile necesare (3), aplică logici dacă este necesar și returnează datele controlorului (4).
Controlorul alege apoi o vizualizare adecvată (5) și prezintă datele (6 și 7). Dacă o solicitare vine de la un dispozitiv portabil, va fi utilizată o vizualizare potrivită pentru acesta sau dacă utilizatorul are o anumită temă selectată, vizualizarea acesteia va fi selectată – și așa mai departe.
Cum să devii un dezvoltator Full Stack

Avantajele arhitecturii MVC

O problemă comună cu care se confruntă dezvoltatorii de aplicații în aceste zile este suportul pentru diferite tipuri de dispozitive. Arhitectura MVC rezolvă această problemă, deoarece dezvoltatorii pot crea diferite interfețe pentru diferite dispozitive și, în funcție de dispozitivul din care se face cererea, controlerul va selecta o vizualizare adecvată. Modelul trimite aceleași date, indiferent de dispozitivul utilizat, ceea ce asigură o consistență completă pe toate dispozitivele.
Separarea MVC izolează frumos perspectiva de logica afacerii. De asemenea, reduce complexitățile în proiectarea aplicațiilor mari, menținând codul și fluxul de lucru structurat. Acest lucru face ca codul general să fie mult mai ușor de întreținut, testat, depanat și reutilizat.

O implementare simplă a MVC folosind Java

Vom avea următoarele trei:

    1. StudentObject: modelul.

    1. StudentView: vizualizați clasa pentru a imprima detalii pe consolă.

  1. StudentController: un controler care stochează date în studentObject și actualizează StudentView în consecință

Pasul 1: Creați modelul

 elev la clasă publică {
   private String rollNu ;
   private String nume ;
   
   public String getRollNo () {
      return rollNu ;
   }
   
   public void setRollNo ( String rollNo ) {
      aceasta . rolaNu = rolaNu ;
   }
   
   public String getName () {
      returnează numele ;
   }
   
   public void setName ( nume șir ) {
      aceasta . nume = nume ;
   }
}

Codul se explică de la sine. Este alcătuit din funcții pentru a obține/seta numărul de role și numele studenților. Să-i spunem „student.java”.
Pasul 2: Creați vizualizarea

 clasă publică StudentView {
   public void printStudentDetails ( String studentName , String studentRollNo ){
      Sistem . afară . println ( "Student: " );
      Sistem . afară . println ( "Nume: " + studentName );
      Sistem . afară . println ( "Roll No: " + studentRollNo );
   }
}

Acesta este pur și simplu pentru a imprima valorile pe consolă. Să numim asta „studentView.java”.
Pasul 3: Creați controlerul

 clasă publică StudentController {
   model privat Student ;
   vizualizare privată StudentView ;
   public StudentController ( model Student , vizualizare StudentView ){
      aceasta . model = model ;
      aceasta . vedere = vedere ;
   }
   public void setStudentName ( Nume șir ){
model . setName ( nume );
   }
   public String getStudentName (){
      model de retur . getName ();
   }
   public void setStudentRollNo ( String rollNo ){
model . setRollNo ( rollNu );
   }
   public String getStudentRollNo (){
      model de retur . getRollNo ();
   }
   public void updateView (){
vedere . printStudentDetails ( model . getName (), model . getRollNo ());
   }
}

Numiți acest lucru „StudentController.java”. O privire scurtă vă va spune că acest controler este doar responsabil pentru apelarea modelului pentru a obține/setare datele și apoi pentru a actualiza vizualizarea.
Acum, să aruncăm o privire la modul în care toate acestea sunt legate între ele.
Pasul 4: Creați fișierul principal Java

 clasă publică MVCPatternDemo {
   public static void main ( String [] args ) {
      //aduceți fișa studentului pe baza numărului său din baza de date
      Model student = retriveStudentFromDatabase ();
      //Creează o vizualizare: pentru a scrie detaliile elevului pe consolă
      Vizualizare StudentView = nou StudentView ();
      StudentController controller = new StudentController ( model , vizualizare );
controlor . updateView ();
      //actualizează datele modelului
controlor . setStudentName ( "Ioan" );
controlor . updateView ();
   }
   privat static Student retriveStudentFromDatabase (){
      Student student = student nou ();
student . setName ( "Robert" );
student . setRollNo ( "10" );
      student revenit ;
   }
}

Acesta se numește „MVCPatternDemo.java”. După cum puteți vedea, preia datele elevului din baza de date sau dintr-o funcție (în acest caz, folosim o funcție pentru a seta valorile) și le împinge pe modelul Student. Apoi, inițializează vizualizarea pe care am creat-o mai devreme.
În plus, inițializează și controlerul nostru și îl leagă de model și de vedere. Metoda updateView() este o parte a controlerului care actualizează detaliile studentului pe consolă.
Pasul 5: Testați rezultatul
Dacă totul merge bine, rezultatul ar trebui să fie:

 Student:
Nume: Robert
Rola nr: 10
Student:
Nume: Ioan
Rola nr: 10

Dacă obțineți asta ca rezultat, felicitări! Ați implementat cu succes arhitectura MVC folosind Java, deși pentru o aplicație simplă. Oricât de simplă, această aplicație este suficientă pentru a demonstra puterile arhitecturii MVC.
15 întrebări pe care trebuie să le cunoașteți pentru interviul Spring MVC

Încheierea…
După atât de multe spuse și făcute, este greu să subliniezi mai mult puterea arhitecturii MVC în orice aplicație web/desktop în zilele noastre. Oferă un nivel cu totul nou de modularitate codului dvs., ceea ce îl face mult mai lizibil și mai ușor de întreținut. Deci, dacă doriți să ajungeți la noi culmi în cariera dvs. de dezvoltator de aplicații, obținerea arhitecturii MVC și funcționarea acesteia ar trebui să fie prioritatea dvs. principală.

Înscrieți-vă la cursurile de inginerie software de la cele mai bune universități din lume. Câștigă programe Executive PG, programe avansate de certificat sau programe de master pentru a-ți accelera cariera.

Dați un comentariu și spuneți-ne cum vă place acest articol!

Deveniți un dezvoltator Full Stack

UpGrad și IIIT-Bangalore's PG Diploma in Software Development
Aplicați acum pentru masterat în inginerie software