L'Arquitectura MVC (Model-View-Controller) és un patró de disseny àmpliament utilitzat en el desenvolupament d'aplicacions web. Aquest patró separa l'aplicació en tres components principals: el Model, la Vista i el Controlador. Aquesta separació facilita la gestió del codi, la seva mantenibilitat i la col·laboració entre desenvolupadors.

Components de l'Arquitectura MVC

  1. Model

El Model representa la lògica de negoci de l'aplicació i la seva estructura de dades. És responsable de gestionar les dades, ja sigui recuperant-les d'una base de dades, manipulant-les o validant-les.

Funcions del Model:

  • Gestionar les dades de l'aplicació.
  • Interactuar amb la base de dades.
  • Aplicar la lògica de negoci.
  • Validar les dades.

Exemple de Model en PHP:

class User {
    private $db;

    public function __construct($database) {
        $this->db = $database;
    }

    public function getUserById($id) {
        $stmt = $this->db->prepare("SELECT * FROM users WHERE id = :id");
        $stmt->bindParam(':id', $id);
        $stmt->execute();
        return $stmt->fetch(PDO::FETCH_ASSOC);
    }

    public function createUser($data) {
        $stmt = $this->db->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
        $stmt->bindParam(':name', $data['name']);
        $stmt->bindParam(':email', $data['email']);
        return $stmt->execute();
    }
}

  1. Vista

La Vista és responsable de la presentació de les dades. És la capa que interactua amb l'usuari, mostrant la informació i recollint les seves entrades. Les vistes solen ser plantilles HTML amb codi PHP incrustat per mostrar les dades dinàmiques.

Funcions de la Vista:

  • Mostrar les dades a l'usuari.
  • Recollir les entrades de l'usuari.
  • Presentar la informació de manera amigable.

Exemple de Vista en PHP:

<!DOCTYPE html>
<html>
<head>
    <title>Detalls de l'Usuari</title>
</head>
<body>
    <h1>Detalls de l'Usuari</h1>
    <p>Nom: <?php echo htmlspecialchars($user['name']); ?></p>
    <p>Email: <?php echo htmlspecialchars($user['email']); ?></p>
</body>
</html>

  1. Controlador

El Controlador actua com a intermediari entre el Model i la Vista. Rep les sol·licituds de l'usuari, interactua amb el Model per processar les dades i selecciona la Vista adequada per mostrar els resultats.

Funcions del Controlador:

  • Rebre i gestionar les sol·licituds de l'usuari.
  • Interactuar amb el Model per obtenir o modificar dades.
  • Seleccionar la Vista adequada per mostrar la informació.

Exemple de Controlador en PHP:

class UserController {
    private $userModel;

    public function __construct($userModel) {
        $this->userModel = $userModel;
    }

    public function showUser($id) {
        $user = $this->userModel->getUserById($id);
        include 'views/user_view.php';
    }

    public function createUser($data) {
        $this->userModel->createUser($data);
        header('Location: /users');
    }
}

Flux de Treball en MVC

  1. Sol·licitud de l'Usuari: L'usuari fa una sol·licitud a l'aplicació (per exemple, accedint a una URL específica).
  2. Controlador: El controlador rep la sol·licitud i determina quina acció ha de prendre.
  3. Model: El controlador interactua amb el model per obtenir o modificar les dades necessàries.
  4. Vista: El controlador selecciona la vista adequada i li passa les dades obtingudes del model.
  5. Resposta a l'Usuari: La vista genera la resposta HTML que es mostra a l'usuari.

Avantatges de l'Arquitectura MVC

  • Separació de Responsabilitats: Cada component té una responsabilitat clara, la qual cosa facilita la gestió i manteniment del codi.
  • Reutilització de Codi: Els models i les vistes poden ser reutilitzats en diferents parts de l'aplicació.
  • Facilitat de Proves: La separació de la lògica de negoci i la presentació facilita la realització de proves unitàries i d'integració.
  • Col·laboració: Permet que diferents desenvolupadors treballin en diferents components de l'aplicació de manera simultània.

Exercici Pràctic

Objectiu

Crear una aplicació senzilla que mostri una llista d'usuaris i permeti afegir-ne de nous utilitzant l'arquitectura MVC.

Passos

  1. Model:

    • Crear una classe User que gestioni les operacions de la base de dades per als usuaris.
  2. Vista:

    • Crear una vista user_list.php per mostrar la llista d'usuaris.
    • Crear una vista user_form.php per afegir nous usuaris.
  3. Controlador:

    • Crear una classe UserController que gestioni les sol·licituds per mostrar la llista d'usuaris i afegir-ne de nous.

Solució

Model:

class User {
    private $db;

    public function __construct($database) {
        $this->db = $database;
    }

    public function getAllUsers() {
        $stmt = $this->db->query("SELECT * FROM users");
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    public function createUser($data) {
        $stmt = $this->db->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
        $stmt->bindParam(':name', $data['name']);
        $stmt->bindParam(':email', $data['email']);
        return $stmt->execute();
    }
}

Vista: user_list.php

<!DOCTYPE html>
<html>
<head>
    <title>Llista d'Usuaris</title>
</head>
<body>
    <h1>Llista d'Usuaris</h1>
    <ul>
        <?php foreach ($users as $user): ?>
            <li><?php echo htmlspecialchars($user['name']); ?> - <?php echo htmlspecialchars($user['email']); ?></li>
        <?php endforeach; ?>
    </ul>
    <a href="user_form.php">Afegir Nou Usuari</a>
</body>
</html>

Vista: user_form.php

<!DOCTYPE html>
<html>
<head>
    <title>Afegir Nou Usuari</title>
</head>
<body>
    <h1>Afegir Nou Usuari</h1>
    <form action="create_user.php" method="post">
        <label for="name">Nom:</label>
        <input type="text" id="name" name="name" required>
        <br>
        <label for="email">Email:</label>
        <input type="email" id="email" name="email" required>
        <br>
        <button type="submit">Afegir Usuari</button>
    </form>
</body>
</html>

Controlador:

class UserController {
    private $userModel;

    public function __construct($userModel) {
        $this->userModel = $userModel;
    }

    public function listUsers() {
        $users = $this->userModel->getAllUsers();
        include 'views/user_list.php';
    }

    public function createUser($data) {
        $this->userModel->createUser($data);
        header('Location: /users');
    }
}

Conclusió

L'arquitectura MVC és un patró de disseny potent que ajuda a organitzar el codi de manera clara i eficient. En aquest mòdul, hem après els conceptes bàsics de l'arquitectura MVC i hem creat una aplicació senzilla per posar en pràctica aquests conceptes. En el següent mòdul, explorarem les millors pràctiques en el desenvolupament PHP per assegurar-nos que el nostre codi sigui robust, segur i fàcil de mantenir.

Curs de Programació PHP

Mòdul 1: Introducció a PHP

Mòdul 2: Estructures de Control

Mòdul 3: Funcions

Mòdul 4: Arrays

Mòdul 5: Treballant amb Formularis

Mòdul 6: Treballant amb Fitxers

Mòdul 7: Programació Orientada a Objectes (OOP)

Mòdul 8: Treballant amb Bases de Dades

Mòdul 9: Tècniques Avançades de PHP

Mòdul 10: Frameworks PHP i Millors Pràctiques

Mòdul 11: Projecte: Construint una Aplicació Web

© Copyright 2024. Tots els drets reservats