Modelul de proiectare MVC este un model de arhitectură software care separă o aplicație în trei componente principale: Model, View și Controller, facilitând gestionarea și întreținerea bazei de cod. De asemenea, permite reutilizarea componentelor și promovează o abordare mai modulară a dezvoltării software.
Subiecte importante pentru modelul de proiectare MVC
- Ce este modelul de design MVC?
- Componentele modelului de proiectare MVC
- Comunicarea între componente
- Exemplu de model de proiectare MVC
- Avantajele modelului de design MVC
- Dezavantajele modelului de design MVC
Ce este modelul de design MVC?
The Model View Controller Modelul de proiectare (MVC) specifică faptul că o aplicație constă dintr-un model de date, informații de prezentare și informații de control. Modelul necesită ca fiecare dintre acestea să fie separate în obiecte diferite.
- Modelul MVC separă preocupările unei aplicații în trei componente distincte, fiecare responsabilă pentru un aspect specific al funcționalității aplicației.
- Această separare a preocupărilor face aplicația mai ușor de întreținut și extins, deoarece modificările unei componente nu necesită modificări ale celorlalte componente.
Componentele modelului de proiectare MVC
1. Model
Componenta Model din modelul de proiectare MVC (Model-View-Controller) reprezintă datele și logica de afaceri a unei aplicații. Acesta este responsabil pentru gestionarea datelor aplicației, procesarea regulilor de afaceri și răspunsul la solicitările de informații de la alte componente, cum ar fi View și Controller.
2. Vizualizare
Afișează datele de la model către utilizator și trimite intrările utilizatorului către controler. Este pasiv și nu interacționează direct cu Modelul. În schimb, primește date de la Model și trimite intrările utilizatorului către Controlor pentru procesare.
3. Controler
Controlerul acționează ca un intermediar între Model și Vedere. Se ocupă de intrarea utilizatorului și actualizează modelul în consecință și actualizează vizualizarea pentru a reflecta modificările din model. Conține logica aplicației, cum ar fi validarea intrărilor și transformarea datelor.
Comunicarea între componente
Acest flux de comunicații de mai jos asigură că fiecare componentă este responsabilă pentru un aspect specific al funcționalității aplicației, ceea ce duce la o arhitectură mai întreținută și mai scalabilă.
- Interacțiunea utilizatorului cu View:
- Utilizatorul interacționează cu vizualizarea, cum ar fi făcând clic pe un buton sau introducând text într-un formular.
- Vizualizare primește intrarea utilizatorului:
- Vizualizarea primește intrarea utilizatorului și o trimite către Controler.
- Controlerul procesează intrarea utilizatorului:
- Controlerul primește intrarea utilizatorului din vizualizare.
- Acesta interpretează intrarea, efectuează orice operațiuni necesare (cum ar fi actualizarea modelului) și decide cum să răspundă.
- Model de actualizări ale controlerului:
- Controlerul actualizează modelul pe baza intrării utilizatorului sau a logicii aplicației.
- Modelul notifică vizualizarea modificărilor:
- Dacă Modelul se modifică, acesta anunță Vizualizarea.
- Vedeți datele solicitărilor de la model:
- Vizualizarea solicită date de la Model pentru a-și actualiza afișarea.
- Vizualizare actualizări controler:
- Controlorul actualizează vizualizarea pe baza modificărilor din model sau ca răspuns la intrarea utilizatorului.
- Vedeți interfața de utilizare actualizată pentru randări:
- Vizualizarea redă interfața de utilizare actualizată pe baza modificărilor făcute de controler.
Exemplu de model de proiectare MVC
Mai jos este codul declarației problemei de mai sus folosind modelul de proiectare MVC:
Să împărțim codul în funcție de componente:
1. Model (clasa de studenți)
Reprezintă datele (numele elevului și numărul de rol) și oferă metode de accesare și modificare a acestor date.
Java
atașare șir de caractere java
class> Student {> > private> String rollNo;> > private> String name;> > public> String getRollNo() {> > return> rollNo;> > }> > public> void> setRollNo(String rollNo) {> > this> .rollNo = rollNo;> > }> > public> String getName() {> > return> name;> > }> > public> void> setName(String name) {> > this> .name = name;> > }> }> |
>
>
2. Vizualizare (clasa StudentView)
Reprezintă modul în care datele (detaliile studentului) ar trebui să fie afișate utilizatorului. Conține o metodă ( printStudentDetails>
) pentru a tipări numele elevului și numărul de rolă.
Java
arbore binar în java
class> StudentView {> > public> void> printStudentDetails(String studentName, String studentRollNo) {> > System.out.println(> 'Student:'> );> > System.out.println(> 'Name: '> + studentName);> > System.out.println(> 'Roll No: '> + studentRollNo);> > }> }> |
>
>
3. Controler (clasa StudentController)
Acționează ca intermediar între Model și Vedere. Conține referințe la obiectele Model și View. Oferă metode de actualizare a modelului (de ex., setStudentName>
, setStudentRollNo>
) și pentru a actualiza vizualizarea ( updateView>
).
Java
fundal css
class> StudentController {> > private> Student model;> > private> StudentView view;> > public> StudentController(Student model, StudentView view) {> > this> .model = model;> > this> .view = view;> > }> > public> void> setStudentName(String name) {> > model.setName(name);> > }> > public> String getStudentName() {> > return> model.getName();> > }> > public> void> setStudentRollNo(String rollNo) {> > model.setRollNo(rollNo);> > }> > public> String getStudentRollNo() {> > return> model.getRollNo();> > }> > public> void> updateView() {> > view.printStudentDetails(model.getName(), model.getRollNo());> > }> }> |
>
>
Cod complet pentru exemplul de mai sus
Mai jos este codul complet pentru exemplul de mai sus:
Java
class> Student {> > private> String rollNo;> > private> String name;> > public> String getRollNo() {> > return> rollNo;> > }> > public> void> setRollNo(String rollNo) {> > this> .rollNo = rollNo;> > }> > public> String getName() {> > return> name;> > }> > public> void> setName(String name) {> > this> .name = name;> > }> }> class> StudentView {> > public> void> printStudentDetails(String studentName, String studentRollNo) {> > System.out.println(> 'Student:'> );> > System.out.println(> 'Name: '> + studentName);> > System.out.println(> 'Roll No: '> + studentRollNo);> > }> }> class> StudentController {> > private> Student model;> > private> StudentView view;> > public> StudentController(Student model, StudentView view) {> > this> .model = model;> > this> .view = view;> > }> > public> void> setStudentName(String name) {> > model.setName(name);> > }> > public> String getStudentName() {> > return> model.getName();> > }> > public> void> setStudentRollNo(String rollNo) {> > model.setRollNo(rollNo);> > }> > public> String getStudentRollNo() {> > return> model.getRollNo();> > }> > public> void> updateView() {> > view.printStudentDetails(model.getName(), model.getRollNo());> > }> }> public> class> MVCPattern {> > public> static> void> main(String[] args) {> > Student model = retriveStudentFromDatabase();> > StudentView view => new> StudentView();> > StudentController controller => new> StudentController(model, view);> > controller.updateView();> > controller.setStudentName(> 'Vikram Sharma'> );> > controller.updateView();> > }> > private> static> Student retriveStudentFromDatabase() {> > Student student => new> Student();> > student.setName(> 'Lokesh Sharma'> );> > student.setRollNo(> '15UCS157'> );> > return> student;> > }> }> |
>
>
Ieșire
egalitatea șirurilor de caractere în java
Student:> Name: Lokesh Sharma> Roll No: 15UCS157> Student:> Name: Vikram Sharma> Roll No: 15UCS157> |
>
>
Avantajele modelului de design MVC
- Separarea preocupărilor: MVC separă diferitele aspecte ale unei aplicații (date, interfață de utilizare și logică), făcând codul mai ușor de înțeles, întreținut și modificat.
- Modularitate: Fiecare componentă (Model, Vizualizare, Controler) poate fi dezvoltată și testată separat, promovând reutilizarea și scalabilitatea codului.
- Flexibilitate: Deoarece componentele sunt independente, modificările aduse unei componente nu le afectează pe celelalte, permițând actualizări și modificări mai ușoare.
- Dezvoltare paralelă: Mai mulți dezvoltatori pot lucra la diferite componente simultan, accelerând procesul de dezvoltare.
- Reutilizarea codului: Componentele pot fi reutilizate în alte părți ale aplicației sau în diferite proiecte, reducând timpul și efortul de dezvoltare.
Dezavantajele modelului de design MVC
- Complexitate: Implementarea modelului MVC poate adăuga complexitate codului, în special pentru aplicații mai simple, ceea ce duce la suprasolicitare în dezvoltare.
- Curbă de învățare: Dezvoltatorii trebuie să înțeleagă conceptul de MVC și cum să-l implementeze eficient, ceea ce poate necesita timp și resurse suplimentare.
- deasupra capului: Comunicarea dintre componente (Model, Vizualizare, Controler) poate duce la supraîncărcare, afectând performanța aplicației, în special în mediile cu resurse limitate.
- Potențial de suprainginerie: În unele cazuri, dezvoltatorii pot suprainginerească aplicația prin adăugarea de abstracții și straturi inutile, ceea ce duce la cod umflat și greu de întreținut.
- Număr crescut de fișiere: MVC poate duce la un număr mai mare de fișiere și clase în comparație cu arhitecturile mai simple, ceea ce poate face structura proiectului mai complexă și mai greu de navigat.