Modelo-Vista-Controlador (MVC)#

Introducción#

El diseño MVC (Model-View-Controller) es uno de los patrones de diseño más utilizados en el desarrollo de software, especialmente en aplicaciones con interfaces gráficas o sistemas web. Este patrón separa la lógica de negocio, la presentación, y la interacción del usuario en tres componentes distintos: Modelo (Model), Vista (View) y Controlador (Controller).

La principal ventaja de este diseño es que promueve la modularidad, facilitando el mantenimiento, la escalabilidad y la reutilización de los componentes de la aplicación. En esta clase aprenderemos los fundamentos del diseño MVC, sus aplicaciones prácticas y cómo implementarlo en Java. [1]

Objetivos#

  • Explicar el concepto de diseño MVC y su importancia en el desarrollo de software.

  • Entender cómo se separan las responsabilidades entre los componentes Model, View y Controller.

  • Implementar un ejemplo práctico de MVC en Java.

  • Reconocer las aplicaciones más comunes del diseño MVC.

Administrador de Diseño: El Patrón MVC#

¿Qué es el Patrón MVC?#

El patrón MVC organiza el código de una aplicación dividiéndolo en tres partes principales:

  1. Modelo (Model):

    • Representa la lógica de negocio y los datos de la aplicación.

    • Encapsula las reglas de negocio, la gestión de datos, y la conexión con bases de datos.

    • No tiene conocimiento directo de la vista ni del controlador.

  2. Vista (View):

    • Es la interfaz que se presenta al usuario.

    • Se encarga de mostrar los datos que provienen del modelo, pero no contiene lógica de negocio.

    • Es completamente independiente del modelo.

  3. Controlador (Controller):

    • Actúa como un intermediario entre el modelo y la vista.

    • Recibe las entradas del usuario desde la vista, las procesa, y decide qué debe hacer el modelo.

«

Ejemplos#

Ventajas del Diseño MVC#

  • Modularidad: Facilita el mantenimiento y las pruebas al dividir el código en componentes separados.

  • Escalabilidad: Permite que diferentes equipos trabajen en paralelo en el modelo, la vista y el controlador.

  • Reutilización de Código: Las vistas pueden reutilizarse para diferentes modelos y controladores.

Aplicaciones del Modelo MVC#

El patrón MVC se utiliza ampliamente en:

  1. Aplicaciones de Escritorio: Sistemas de gestión de bibliotecas, aplicaciones de administración, etc.

  2. Desarrollo Web: Frameworks como Spring MVC y JavaServer Faces (JSF) implementan este patrón.

  3. Aplicaciones Móviles: Muchas arquitecturas en Android (como MVVM) derivan del patrón MVC.

  4. Juegos: Para separar la lógica de juego, la interfaz gráfica, y los controles del usuario.

Ejemplo de Implementación MVC en Java#

A continuación, se muestra un ejemplo sencillo de un sistema de gestión de estudiantes implementado con el diseño MVC.

Modelo (Model)#

El modelo se encarga de los datos y la lógica de negocio. En este caso, representaremos a un estudiante:

// Modelo: Estudiante.java
public class Estudiante {
  private String nombre;
  private String id;

  public Estudiante(String nombre, String id) {
      this.nombre = nombre;
      this.id = id;
  }

  public String getNombre() {
      return nombre;
  }

  public void setNombre(String nombre) {
      this.nombre = nombre;
  }

  public String getId() {
      return id;
  }

  public void setId(String id) {
      this.id = id;
  }
}
// Probar clase aquí

Vista (View)#

La vista muestra la información del estudiante al usuario.

// Vista: EstudianteView.java
public class EstudianteView {
  public void mostrarDetallesEstudiante(String nombre, String id) {
      System.out.println("Detalles del Estudiante:");
      System.out.println("Nombre: " + nombre);
      System.out.println("ID: " + id);
  }
}
// Probar clase aquí

Controlador (Controller)#

El controlador actúa como intermediario entre el modelo y la vista.

// Controlador: EstudianteController.java
public class EstudianteController {
  private Estudiante modelo;
  private EstudianteView vista;

  public EstudianteController(Estudiante modelo, EstudianteView vista) {
      this.modelo = modelo;
      this.vista = vista;
  }

  public void setNombreEstudiante(String nombre) {
      modelo.setNombre(nombre);
  }

  public String getNombreEstudiante() {
      return modelo.getNombre();
  }

  public void setIdEstudiante(String id) {
      modelo.setId(id);
  }

  public String getIdEstudiante() {
      return modelo.getId();
  }

  public void actualizarVista() {
      vista.mostrarDetallesEstudiante(modelo.getNombre(), modelo.getId());
  }
}
// Probar clase aquí

Clase Principal#

La clase principal ensambla los componentes y simula el flujo del programa.

// Clase Principal: Main.java
public class Main {
  public static void main(String[] args) {
      // Crear el modelo
      Estudiante modelo = new Estudiante("Juan Pérez", "12345");

      // Crear la vista
      EstudianteView vista = new EstudianteView();

      // Crear el controlador
      EstudianteController controlador = new EstudianteController(modelo, vista);

      // Mostrar detalles iniciales
      controlador.actualizarVista();

      // Actualizar datos del estudiante
      controlador.setNombreEstudiante("María Gómez");
      controlador.setIdEstudiante("67890");

      // Mostrar detalles actualizados
      controlador.actualizarVista();
  }
}
// Probar clase aquí

Salida del Programa#

Detalles del Estudiante:
Nombre: Juan Pérez
ID: 12345
Detalles del Estudiante:
Nombre: María Gómez
ID: 67890

Esta vista es demasiado simple, ¿cómo se puede mejorar?

Conclusiones#

El diseño MVC es un patrón poderoso y ampliamente utilizado que permite dividir un sistema en componentes separados y manejables. Su implementación en Java es relativamente sencilla y es clave para desarrollar aplicaciones escalables y fáciles de mantener. La práctica con ejemplos como este fortalece la comprensión del patrón y su aplicación.

Recursos Adicionales#

Guías y Tutoriales#

  • TutorialsPoint. MVC Design Pattern. Link

  • Oracle Java Documentation. MVC in Java Swing. Link

  • GeeksforGeeks. Model-View-Controller Architecture in Java. Link

Videos#