logo

Patró de disseny MVC

El patró de disseny MVC és un patró d'arquitectura de programari que separa una aplicació en tres components principals: model, vista i controlador, cosa que facilita la gestió i el manteniment de la base de codi. També permet la reutilització dels components i promou un enfocament més modular del desenvolupament de programari.



Temes importants per al patró de disseny MVC

Què és el patró de disseny MVC?

El Controlador de vista del model El patró de disseny (MVC) especifica que una aplicació consta d'un model de dades, informació de presentació i informació de control. El patró requereix que cadascun d'ells estigui separat en diferents objectes.

  • El patró MVC separa les preocupacions d'una aplicació en tres components diferents, cadascun responsable d'un aspecte específic de la funcionalitat de l'aplicació.
  • Aquesta separació de preocupacions fa que l'aplicació sigui més fàcil de mantenir i ampliar, ja que els canvis a un component no requereixen canvis als altres components.

Components del patró de disseny MVC



1. Model

El component Model del patró de disseny MVC (Model-View-Controller) representa les dades i la lògica de negoci d'una aplicació. És responsable de gestionar les dades de l'aplicació, processar les regles de negoci i respondre a les sol·licituds d'informació d'altres components, com ara la vista i el controlador.

2. Vista

Mostra les dades del model a l'usuari i envia les entrades de l'usuari al controlador. És passiu i no interactua directament amb el Model. En comptes d'això, rep dades del Model i envia les entrades de l'usuari al Controlador perquè les processi.

3. Controlador

El controlador actua com a intermediari entre el model i la vista. Gestiona l'entrada de l'usuari i actualitza el model en conseqüència i actualitza la vista per reflectir els canvis en el model. Conté lògica d'aplicació, com ara la validació d'entrada i la transformació de dades.



Comunicació entre els components

Aquest flux de comunicació a continuació garanteix que cada component sigui responsable d'un aspecte específic de la funcionalitat de l'aplicació, donant lloc a una arquitectura més sostenible i escalable.

  • Interacció de l'usuari amb View:
    • L'usuari interactua amb la Vista, com ara fer clic a un botó o introduir text en un formulari.
  • La visualització rep l'entrada de l'usuari:
    • La vista rep l'entrada de l'usuari i l'envia al controlador.
  • El controlador processa l'entrada de l'usuari:
    • El controlador rep l'entrada de l'usuari de la vista.
    • Interpreta l'entrada, realitza les operacions necessàries (com ara actualitzar el model) i decideix com respondre.
  • Model d'actualitzacions del controlador:
    • El controlador actualitza el model segons l'entrada de l'usuari o la lògica de l'aplicació.
  • El model notifica la vista dels canvis:
    • Si el model canvia, notifica a la vista.
  • Consulta les dades de les sol·licituds del model:
    • La vista sol·licita dades del model per actualitzar-ne la visualització.
  • Visualització de les actualitzacions del controlador:
    • El controlador actualitza la vista en funció dels canvis en el model o en resposta a l'entrada de l'usuari.
  • Mostra la interfície d'usuari actualitzada de renders:
    • La vista mostra la interfície d'usuari actualitzada en funció dels canvis fets pel controlador.

Exemple del patró de disseny MVC

A continuació es mostra el codi de la declaració del problema anterior utilitzant el patró de disseny MVC:

Desglossem el codi per components:

1. Model (classe d'alumnes)

Representa les dades (nom de l'alumne i número de registre) i proporciona mètodes per accedir i modificar aquestes dades.

Java


diagrama de classes 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. Visualització (classe StudentView)

Representa com s'han de mostrar les dades (detalles de l'alumne) a l'usuari. Conté un mètode ( printStudentDetails> ) per imprimir el nom i el número de rotlle de l'alumne.

Java




el que és 10 de 60
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. Controlador (classe StudentController)

Actua com a intermediari entre el Model i la Vista. Conté referències als objectes Model i View. Proporciona mètodes per actualitzar el model (p. ex., setStudentName> , setStudentRollNo> ) i per actualitzar la vista ( updateView> ).

Java




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());> >}> }>

>

>

Codi complet per a l'exemple anterior

A continuació es mostra el codi complet de l'exemple anterior:

Java


descarregar youtube vlc media player



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;> >}> }>

>

>

Sortida

com fer-ho a Photoshop




Student:> Name: Lokesh Sharma> Roll No: 15UCS157> Student:> Name: Vikram Sharma> Roll No: 15UCS157>

>

>

Avantatges del patró de disseny MVC

  • Separació de preocupacions: MVC separa els diferents aspectes d'una aplicació (dades, interfície d'usuari i lògica), fent que el codi sigui més fàcil d'entendre, mantenir i modificar.
  • Modularitat: Cada component (Model, Vista, Controlador) es pot desenvolupar i provar per separat, afavorint la reutilització i escalabilitat del codi.
  • Flexibilitat: Com que els components són independents, els canvis a un component no afecten els altres, la qual cosa permet actualitzacions i modificacions més fàcils.
  • Desenvolupament paral·lel: Diversos desenvolupadors poden treballar en diferents components simultàniament, accelerant el procés de desenvolupament.
  • Reutilitzabilitat del codi: Els components es poden reutilitzar en altres parts de l'aplicació o en diferents projectes, reduint el temps i l'esforç de desenvolupament.

Desavantatges del patró de disseny MVC

  • Complexitat: La implementació del patró MVC pot afegir complexitat al codi, especialment per a aplicacions més senzilles, la qual cosa comporta una sobrecàrrega en el desenvolupament.
  • Corba d'aprenentatge: Els desenvolupadors han d'entendre el concepte de MVC i com implementar-lo de manera eficaç, cosa que pot requerir temps i recursos addicionals.
  • Càrrec: La comunicació entre components (Model, Vista, Controlador) pot comportar una sobrecàrrega, afectant el rendiment de l'aplicació, especialment en entorns amb recursos limitats.
  • Potencial de sobreenginyeria: En alguns casos, els desenvolupadors poden enginyeria excessiva de l'aplicació afegint abstraccions i capes innecessàries, la qual cosa condueix a un codi inflat i difícil de mantenir.
  • Augment del recompte de fitxers: MVC pot donar lloc a un nombre més gran de fitxers i classes en comparació amb arquitectures més simples, cosa que pot fer que l'estructura del projecte sigui més complexa i més difícil de navegar.