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
- 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(); } }
- 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>
- 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
- Sol·licitud de l'Usuari: L'usuari fa una sol·licitud a l'aplicació (per exemple, accedint a una URL específica).
- Controlador: El controlador rep la sol·licitud i determina quina acció ha de prendre.
- Model: El controlador interactua amb el model per obtenir o modificar les dades necessàries.
- Vista: El controlador selecciona la vista adequada i li passa les dades obtingudes del model.
- 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
-
Model:
- Crear una classe
User
que gestioni les operacions de la base de dades per als usuaris.
- Crear una classe
-
Vista:
- Crear una vista
user_list.php
per mostrar la llista d'usuaris. - Crear una vista
user_form.php
per afegir nous usuaris.
- Crear una vista
-
Controlador:
- Crear una classe
UserController
que gestioni les sol·licituds per mostrar la llista d'usuaris i afegir-ne de nous.
- Crear una classe
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
- Què és PHP?
- Configuració de l'Entorn de Desenvolupament
- El teu Primer Script PHP
- Sintaxi i Variables de PHP
- Tipus de Dades en PHP
Mòdul 2: Estructures de Control
Mòdul 3: Funcions
- Definició i Crida de Funcions
- Paràmetres de Funció i Valors de Retorn
- Àmbit de Variables
- Funcions Anònimes i Closures
Mòdul 4: Arrays
Mòdul 5: Treballant amb Formularis
Mòdul 6: Treballant amb Fitxers
- Lectura i Escriptura de Fitxers
- Funcions de Gestió de Fitxers
- Permisos de Fitxers
- Funcions de Directori
Mòdul 7: Programació Orientada a Objectes (OOP)
- Introducció a OOP
- Classes i Objectes
- Propietats i Mètodes
- Herència
- Interfícies i Classes Abstractes
- Traits
Mòdul 8: Treballant amb Bases de Dades
- Introducció a les Bases de Dades
- Connexió a una Base de Dades MySQL
- Realització d'Operacions CRUD
- Ús de PDO per a la Interacció amb Bases de Dades
- Seguretat en Bases de Dades
Mòdul 9: Tècniques Avançades de PHP
- Gestió d'Errors i Excepcions
- Sessions i Cookies
- Expressions Regulars
- Treballant amb JSON i XML
- PHP i Serveis Web
Mòdul 10: Frameworks PHP i Millors Pràctiques
- Introducció als Frameworks PHP
- Començant amb Laravel
- Arquitectura MVC
- Millors Pràctiques en Desenvolupament PHP
- Proves i Depuració