Documentation · Chapitre 02

Séparer les responsabilités
avec MVC.

MVC ne signifie pas créer trois dossiers pour chaque page. C’est une manière de séparer la décision, les données et la présentation.

Le contrôleur n’est pas toute l’application.

MModèle

Représente les données et les règles métier. Il ne décide pas de la couleur d’un bouton.

VVue

Présente des informations. Elle ne devrait pas effectuer une requête SQL.

CContrôleur

Reçoit le cas d’utilisation, appelle ce qui est nécessaire et choisit la réponse.

Exemple : afficher un produit.

phpaml — zsh
'GET /products/{id}' => [ProductController::class, 'show']
phpaml — zsh
public function show(Request $request): Response
{
    $product = $this->products->find((int) $request->attribute('id'));

    if ($product === null) {
        return Response::html('<h1>Not found</h1>', 404);
    }

    return $this->view('products/show.php', ['product' => $product]);
}

La route connaît l’adresse et l’action. Le contrôleur transforme l’identifiant, demande le produit au dépôt, traite l’absence puis choisit une vue. La vue reçoit déjà le produit à afficher.

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.

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.

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.