Documentation · Chapitre 02

Pourquoi ne pas tout écrire
dans un seul fichier ?

On peut commencer dans un seul fichier. Mais lorsque le projet grandit, séparer les tâches aide à comprendre et modifier le code sans tout casser.

Aucun vocabulaire technique préalable n’est nécessaire. Chaque nouveau mot est expliqué avant d’être utilisé.

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.

MModèle : ce que l’application connaît

Le titre du livre, son auteur et la règle qui détermine s’il est disponible.

VVue : ce que la personne voit

Le titre, la couverture et le bouton affichés dans le navigateur.

CContrôleur : ce qui relie les deux

Il reçoit le numéro 12, demande ce livre, puis choisit la page à afficher.

Exemple : afficher notre livre.

phpaml — zsh
'GET /books/{id}' => [BookController::class, 'show']
phpaml — zsh
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.

1

show reçoit la requête déjà reconnue par le routeur.

3

L’identifiant de l’URL est converti en entier, puis transmis au dépôt.

5

Le contrôleur prévoit le cas où le livre n’existe pas.

6

Il choisit alors une réponse 404 explicite.

9

Sinon, 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 vue

La vue connaît alors le stockage et devient difficile à tester.

HTML dans un modèle

Le modèle ne peut plus servir une API ou une autre présentation.

Tout dans le contrôleur

Les 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.

Service

Exécute une opération métier qui combine plusieurs étapes, par exemple emprunter un livre et envoyer une confirmation.

Dépôt

S’occupe de retrouver ou enregistrer les données sans exposer les détails de stockage au contrôleur.

Middleware

Intervient avant ou après le contrôleur pour une règle commune : authentification, sécurité ou journalisation.

Validation

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.

Cela concerne l’adresse ou la méthode HTTPRoute
Cela organise la réponse à une demandeContrôleur
Cela décrit une donnée ou une règle métierModèle / service
Cela choisit ce qui est affichéVue
Cela s’applique à de nombreuses requêtesMiddleware

Pourquoi ne pas tout mettre dans un seul fichier ?

AU DÉBUT

Un fichier unique paraît plus rapide : lire l’URL, interroger la base et écrire le HTML au même endroit.

QUAND LE PROJET GRANDIT

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.