Trois tâches, trois noms.
Les lettres MVC résument trois rôles. Ce ne sont pas trois programmes différents : ce sont trois façons de ranger le travail dans la même application.
Le titre du livre, son auteur et la règle qui détermine s’il est disponible.
Le titre, la couverture et le bouton affichés dans le navigateur.
Il reçoit le numéro 12, demande ce livre, puis choisit la page à afficher.
Exemple : afficher notre livre.
'GET /books/{id}' => [BookController::class, 'show']public function show(Request $request): Response
{
$book = $this->books->find((int) $request->attribute('id'));
if ($book === null) {
return Response::html('<h1>Not found</h1>', 404);
}
return $this->view('books/show.php', ['book' => $book]);
}La route connaît l’adresse et l’action. Le contrôleur transforme l’identifiant, demande le livre au dépôt, traite l’absence puis choisit une vue. La vue reçoit déjà le livre à afficher.
Lisez le contrôleur ligne par ligne.
1show reçoit la requête déjà reconnue par le routeur.
3L’identifiant de l’URL est converti en entier, puis transmis au dépôt.
5Le contrôleur prévoit le cas où le livre n’existe pas.
6Il choisit alors une réponse 404 explicite.
9Sinon, il confie le livre à la vue; il ne fabrique pas le HTML lui-même.
Reconnaître une responsabilité mal placée.
SQL dans une vueLa vue connaît alors le stockage et devient difficile à tester.
HTML dans un modèleLe modèle ne peut plus servir une API ou une autre présentation.
Tout dans le contrôleurLes règles métier deviennent longues, dupliquées et difficiles à réutiliser.
MVC n’est pas seul : trois rôles complémentaires.
À mesure que l’application grandit, certains travaux ne rentrent proprement ni dans un modèle, ni dans une vue, ni dans un contrôleur. On leur donne alors un nom précis au lieu de grossir artificiellement les contrôleurs.
Exécute une opération métier qui combine plusieurs étapes, par exemple emprunter un livre et envoyer une confirmation.
S’occupe de retrouver ou enregistrer les données sans exposer les détails de stockage au contrôleur.
Intervient avant ou après le contrôleur pour une règle commune : authentification, sécurité ou journalisation.
Vérifie que les informations reçues sont présentes et respectent le format attendu.
Une règle simple pour décider où écrire le code.
RouteContrôleurModèle / serviceVueMiddlewarePourquoi ne pas tout mettre dans un seul fichier ?
Un fichier unique paraît plus rapide : lire l’URL, interroger la base et écrire le HTML au même endroit.
Les mêmes règles sont recopiées, les tests exigent une page complète et une modification visuelle risque de toucher aux données. MVC paie son coût lorsque la deuxième fonctionnalité arrive.
QUESTIONS DE DÉBUTANT
Vous vous demandez peut-être…
MVC est-il obligatoire pour chaque petit programme ?
Non. Un exercice très court peut tenir dans un seul fichier. La séparation devient utile lorsque le projet possède plusieurs pages ou règles.
Un modèle est-il forcément une table de base de données ?
Non. Il représente surtout une donnée ou une règle du domaine. Il peut exister avant toute base de données.
Une vue contient-elle toujours du HTML ?
Dans une application classique, souvent oui. Dans AML View, elle peut être décrite avec les composants PHP de PHPAML View.
VÉRIFIEZ VOTRE COMPRÉHENSION
Qui doit vérifier qu’une remise commerciale est autorisée : la vue ou le domaine métier ?
Afficher la réponse
Le domaine métier, généralement dans un modèle ou un service. La vue se contente de présenter le résultat.
À VOUS DE JOUER
Pour l’emprunt d’un livre, répartissez ces tâches : vérifier la disponibilité, lire l’identifiant de l’URL, afficher le bouton Emprunter.
Voir un indice
Modèle/service : disponibilité; contrôleur : identifiant; vue : bouton.
EN RÉSUMÉ
Ce qu’il faut retenir
- Le modèle porte données et règles métier.
- La vue présente.
- Le contrôleur coordonne.
- Une bonne séparation permet de réutiliser la même logique en HTML ou JSON.