Saltar a contenido

El patrón de diseño MVC

El patrón de diseño Modelo-Vista-Controlador (MVC) es una arquitectura de software que divide una aplicación en tres componentes principales: el Modelo, la Vista y el Controlador. En el contexto de PHP, el patrón MVC se utiliza comúnmente para desarrollar aplicaciones web, ya que facilita la organización del código y mejora su mantenimiento.

MVC

Componentes del MVC en PHP

Modelo (Model)

El Modelo representa la capa de datos de la aplicación. Contiene la lógica de negocio, el acceso a los datos y cualquier otra lógica relacionada con la manipulación de datos. En PHP, los modelos suelen ser clases que interactúan con la base de datos, realizan consultas y gestionan los datos.

UsuarioModel.php
<?php
class UsuarioModel {
    private $usuarios = [];

    public function agregarUsuario($datos) {
        $usuario = [];

        $usuario['nombre'] = isset($datos['nombre']) ? $datos['nombre'] : '';
        $usuario['email'] = isset($datos['email']) ? $datos['email'] : '';
        $usuario['edad'] = isset($datos['edad']) ? $datos['edad'] : '';

        $this->usuarios[] = $usuario;
    }

    public function getUsuarios() {
        return $this->usuarios;
    }
}

Vista (View)

La Vista es la capa de presentación de la aplicación. Se encarga de mostrar la información al usuario de manera visual. En PHP, las vistas suelen ser archivos de plantilla que contienen código HTML y, ocasionalmente, fragmentos de PHP para mostrar datos dinámicos.

vista_usuarios.php
<html>
<head>
    <title>Lista de Usuarios</title>
</head>
<body>
    <h1>Lista de Usuarios</h1>
    <ul>
        <?php foreach ($usuarios as $usuario): ?>
            <li><?= htmlspecialchars($usuario['nombre']) ?></li>
        <?php endforeach; ?>
    </ul>
</body>
</html>

Controlador (Controller)

El Controlador actúa como intermediario entre el Modelo y la Vista. Se encarga de procesar las solicitudes del usuario, interactuar con el Modelo para obtener datos y enviar esos datos a la Vista para su presentación. En PHP, los controladores suelen ser clases que manejan las solicitudes HTTP y llaman a los métodos apropiados del Modelo y la Vista.

controlador_usuarios.php
<?php
require_once 'UsuarioModel.php';

$modelo = new UsuarioModel();

// Simulación: podrías reemplazar esto con un formulario real o múltiples envíos
$modelo->agregarUsuario(['nombre' => 'Ana', 'email' => 'ana@example.com', 'edad' => 25]);
$modelo->agregarUsuario(['nombre' => 'Luis', 'email' => 'luis@example.com', 'edad' => 30]);

$usuarios = $modelo->getUsuarios();

include 'vista_usuarios.php';

Flujo de trabajo en MVC

  1. El usuario realiza una solicitud HTTP, por ejemplo, para ver una lista de usuarios.
  2. El enrutador (Router) dirige la solicitud al controlador apropiado, en este caso, al método listar del controlador UsuarioController.
  3. El controlador interactúa con el modelo para obtener los datos necesarios, en este caso, la lista de usuarios.
  4. El controlador envía los datos a la vista correspondiente.
  5. La vista utiliza los datos proporcionados por el controlador para generar la respuesta HTML, que se envía al usuario.

Ventajas del Patrón MVC en PHP

  • Separación de preocupaciones: Permite separar la lógica de negocio, la presentación y el control de flujo en componentes distintos, lo que facilita el mantenimiento y la escalabilidad del código.
  • Reutilización de código: Al dividir la aplicación en componentes independientes, se puede reutilizar el código de manera más eficiente.
  • Facilita la colaboración: Dado que cada componente tiene responsabilidades claras y definidas, varios desarrolladores pueden trabajar en paralelo en diferentes partes de la aplicación.

Actividades

  • 🔬 AP 418. (RA5 / CE5e CE5f CE5g CE5h / IC1 / 3p) - Desarrollar un sistema de registro de usuarios en PHP utilizando el patrón de diseño MVC y almacenamiento en sesiones o cookies. Una vez registrado el usuario, redirígelo a una página de bienvenida o al formulario de inicio de sesión. Asegúrate de implementar prácticas de seguridad como el hash de contraseñas y la validación de datos del usuario.
  • 🧪 PR 419. (RA5 / CE5c CE5e CE5f CE5g CE5h / IC2 / 10p) - El CTO del proyecto te comenta que has de aplicar un sistema de inicio de sesión al proyecto. Para ello haz uso de todo lo aprendido en la UT e implementa, de manera segura, un sistema de autentificación de usuarios. De momento, las únicas credenciales válidas serán admin/admin.
  • 🏹 RE 420. (RA5 / CE5a CE5b CE5c CE5d CE5e CE5f CE5g CE5h / IC2 / 20p) Llega el momento de trabajar en parejas y comenzar el Reto 2. Para ello, deberéis entregar:

    • Clases generadas.
    • Diseño.
    • Prueba de funcionamiento.

    En las fechas indicadas por el docente, cada pareja entregará un informe con los diferentes artefactos generados y presentará mediante video el prototipo desarrollado.

    Se utilizará una rúbrica para su evaluación en base a la siguiente lista de cotejo:

    • Clases PHP generadas.
    • Diseño documentado (estructura del proyecto, diagramas, decisiones técnicas).
    • Funcionalidad de listado de productos implementada.
    • Funcionalidad de carrito de compras funcional y persistente.
    • Simulación del proceso de compra/pedido con almacenamiento de datos.
    • Sistema de autenticación de usuarios implementado.
    • Aplicación estructurada siguiendo el patrón MVC.