Aller au contenu principal

Module 9 – Architecture & bonnes pratiques PHP

Niveau 2 – PHP avancé


Objectifs

Pattern MVC, séparation des responsabilités, principes SOLID en PHP, et refactoring. Ce module prépare directement à Laravel, qui s’appuie sur ces bases.


Théorie

MVC (Model – View – Controller)

MVC sépare l’application en trois couches :

CoucheRôleEn PHP
ModelDonnées et logique métier (accès BDD, règles)Classes métier, repositories, entités
ViewAffichage (HTML, formatage)Fichiers de templates (HTML + echo / boucles)
ControllerOrchestration : reçoit la requête, appelle le Model, choisit la View, renvoie la réponseScripts ou classes qui traitent les actions

Flux typique :
Requête → Controller (lit les paramètres, valide) → Model (récupère/met à jour les données) → Controller (choisit la vue, passe les données) → View (génère le HTML) → Réponse.

Avantages : code plus clair, testable, évolutif. Laravel est basé sur MVC (Models Eloquent, Views Blade, Controllers).


Séparation des responsabilités

Chaque composant doit avoir une seule raison de changer (principe SRP de SOLID).
Exemples :

  • Une classe qui envoie des e-mails ne doit pas générer du HTML complexe.
  • Le Controller ne doit pas contenir de requêtes SQL brutes ; il délègue au Model (ou à un Repository).
  • La View ne doit pas faire d’accès BDD ni de logique métier lourde ; elle reçoit des données déjà prêtes.

SOLID (adapté PHP)

  1. S – Single Responsibility : une classe, une responsabilité.
  2. O – Open/Closed : ouvert à l’extension (nouvelles classes), fermé à la modification du code existant (éviter de casser l’existant).
  3. L – Liskov Substitution : les sous-classes doivent pouvoir remplacer la classe parente sans casser le contrat (comportement attendu).
  4. I – Interface Segregation : interfaces petites et ciblées plutôt qu’une grosse interface.
  5. D – Dependency Inversion : dépendre d’abstractions (interfaces) plutôt que de classes concrètes ; les dépendances sont injectées (constructeur) au lieu d’être créées dans la classe.

En PHP : typer les dépendances par interface, injection par constructeur, éviter new dans les classes métier pour les services (préférer l’injection).


Refactoring

Refactoring = modifier le code pour en améliorer la structure sans changer le comportement (idéalement avec des tests pour vérifier).

Pratiques courantes :

  • Extraire des méthodes ou des classes pour réduire la longueur et clarifier l’intention.
  • Renommer variables/méthodes pour plus de clarté.
  • Remplacer des conditions complexes par du polymorphisme ou des stratégies.
  • Introduire des interfaces pour découpler les implémentations.

Exemple de structure MVC simple (sans framework)

app/
├── Controller/
│ └── UserController.php → reçoit requête, appelle UserRepository, charge la vue
├── Model/
│ └── UserRepository.php → requêtes SQL / PDO
├── View/
│ └── user/
│ └── show.php → HTML + variables passées par le controller
public/
└── index.php → front controller, route vers le bon controller

UserController (simplifié) :

class UserController {
public function __construct(private UserRepository $repo) {}
public function show(int $id): void {
$user = $this->repo->find($id);
if ($user === null) {
http_response_code(404);
return;
}
require __DIR__ . "/../View/user/show.php";
}
}

View (show.php) :
Recevoir $user et afficher uniquement avec htmlspecialchars pour les sorties.


Bonnes pratiques

  1. Controller fin : pas de SQL, pas de HTML ; il orchestre.
  2. Model / Repository : tout l’accès aux données et la logique métier associée.
  3. View : uniquement affichage et boucles simples ; pas de logique métier.
  4. Dépendances : injecter par constructeur, typer avec des interfaces quand c’est pertinent.
  5. Refactoring progressif : petits pas, tests si possible.

Quiz – Module 9

Q1. Quel est le rôle de chaque couche dans MVC ?
Q2. Où doit se trouver la logique d’accès à la base de données ?
Q3. Que signifie « Single Responsibility » ?
Q4. Qu’est-ce que le refactoring ?
Q5. Pourquoi Laravel est-il plus facile à aborder après avoir vu MVC en PHP natif ?

Réponses

R1. Model : données et logique métier. View : affichage (HTML). Controller : reçoit la requête, utilise le Model, choisit la View et renvoie la réponse.

R2. Dans le Model (ou des classes dédiées type Repository), pas dans le Controller ni la View.

R3. Une classe ne doit avoir qu’une seule responsabilité (une seule raison de changer).

R4. Modifier la structure du code pour le rendre plus clair et maintenable sans en changer le comportement (idéalement avec des tests).

R5. Laravel est organisé en MVC (Models, Views Blade, Controllers) et applique les mêmes principes (séparation, injection, interfaces). Comprendre MVC en PHP natif permet de saisir la logique du framework au lieu de « faire de la magie ».


Examen PHP avancé (Niveau 2)

L’examen de fin de Niveau 2 peut porter sur :

  • MVC : identifier où placer une fonctionnalité (Model / View / Controller).
  • SOLID : expliquer SRP et Dependency Inversion avec un exemple.
  • PDO : écrire une requête préparée (SELECT ou INSERT).
  • POO : visibilité, héritage, exception personnalisée.
  • Sécurité : injection SQL, XSS (échappement HTML).

Réussite requise (14/20 à l’examen Niveau 2) pour débloquer le Niveau 3 – Laravel fondamental.


Suite

Niveau 3 – Laravel fondamental : Module 10 – Introduction à Laravel (installation, structure, Artisan, Composer).