El patrón de diseño Model View Controller (MVC) especifica que una aplicación consta de un modelo de datos, información de presentación e información de control. El patrón requiere que cada uno de estos se separe en diferentes objetos.
MVC es más un patrón arquitectónico, pero no para una aplicación completa. MVC se relaciona principalmente con la interfaz de usuario/capa de interacción de una aplicación. Seguirá necesitando una capa de lógica empresarial, tal vez alguna capa de servicio y una capa de acceso a datos.
Diagrama UML Patrón de diseño MVC
Componentes de diseño
- El Modelo contiene solo los datos puros de la aplicación, no contiene ninguna lógica que describa cómo presentar los datos a un usuario.
- La Vista presenta los datos del modelo al usuario. La vista sabe cómo acceder a los datos del modelo, pero no sabe qué significan estos datos ni qué puede hacer el usuario para manipularlos.
- El controlador existe entre la vista y el modelo. Escucha los eventos desenstringdos por la vista (u otra fuente externa) y ejecuta la reacción adecuada a estos eventos. En la mayoría de los casos, la reacción es llamar a un método en el modelo. Dado que la vista y el modelo están conectados a través de un mecanismo de notificación, el resultado de esta acción se refleja automáticamente en la vista.
Veamos un ejemplo de MVC Design Pattern.
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()); } } 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; } }
Producción:
Student: Name: Lokesh Sharma Roll No: 15UCS157 Student: Name: Vikram Sharma Roll No: 15UCS157
Ventajas
- Múltiples desarrolladores pueden trabajar simultáneamente en el modelo, el controlador y las vistas.
- MVC permite la agrupación lógica de acciones relacionadas en un controlador. Las vistas de un modelo específico también se agrupan.
- Los modelos pueden tener varias vistas.
Desventajas
- La navegación del framework puede ser compleja porque introduce nuevas capas de abstracción y requiere que los usuarios se adapten a los criterios de descomposición de MVC.
- El conocimiento de múltiples tecnologías se convierte en la norma. Los desarrolladores que utilizan MVC deben ser expertos en múltiples tecnologías.
Este artículo es una contribución de Saket Kumar . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA