Sobes.tech
Middle

¿Qué es el patrón de arquitectura MVP?

sobes.tech AI

Respuesta de la IA

MVP (Modelo-Vista-Presentador) es un patrón arquitectónico para separar la lógica de negocio, los datos y la interfaz de usuario.

Componentes clave:

  • Modelo: Representa los datos y la lógica de negocio. No tiene conocimiento de la Vista o el Presentador.
  • Vista: Muestra los datos, proporciona la interfaz de usuario y redirige las acciones del usuario al Presentador. No contiene lógica de negocio. La vista es pasiva y solo muestra los datos recibidos del Presentador.
  • Presentador: Actúa como intermediario entre el Modelo y la Vista. Procesa los eventos de la interfaz de usuario, extrae datos del Modelo y actualiza la Vista. El Presentador contiene la lógica de presentación, pero no la lógica de negocio. Gestiona el estado de la Vista.

Interacción:

  1. El usuario interactúa con la Vista.
  2. La Vista delega la acción al Presentador.
  3. El Presentador procesa la acción:
    • Actualiza el Modelo si es necesario.
    • Solicita datos del Modelo.
    • Actualiza la Vista con los nuevos datos.

Ventajas:

  • Mejorabilidad de las pruebas (el Presentador y el Modelo pueden ser probados independientemente de la Vista).
  • Separación de responsabilidades.
  • Mejor mantenibilidad.

Ejemplo (esquema):

// Modelo
class DataModel {
    getData() {
        // ... lógica para obtener datos ...
        return { message: "¡Hola desde el modelo!" };
    }
}

// Vista (pseudocódigo UI)
class TextView {
    display(data) {
        // Actualizar el texto en pantalla
        console.log(data.message);
    }

    onClickButton(handler) {
        // Adjuntar manejador al botón
    }
}

// Presentador
class Presenter {
    constructor(model, view) {
        this.model = model;
        this.view = view;
        this.view.onClickButton(this.handleButtonClick.bind(this)); // Vinculación del evento
    }

    handleButtonClick() {
        const data = this.model.getData();
        this.view.display(data);
    }
}

// Uso
const model = new DataModel();
const view = new TextView(); // Vista real de UI
const presenter = new Presenter(model, view);