L’acronyme MVC (en anglais : Model View Controller) est un terme très répandu dans l’univers du développement logiciel. Il qualifie un modèle de conception (Design-Pattern en anglais), dont l’objectif est d’identifier précisément les responsabilités des différents composants d’une application afin d’augmenter sa maintenabilité et son évolutivité.
Ce modèle, d’abord implémenté dans les années 1980 dans le langage SmallTalk, affecte des tâches précises à trois catégories de composants :
- Le modèle : Gère les données et les traitements métier de l’application.
- La vue : Prend en charge l’affichage des informations à destination de l’utilisateur final.
- Le contrôleur : Fait le lien entre l’utilisateur, les données et la vue.
Ce modèle a été repris dans les années 1990 par la plateforme Java Enterprise Edition pour le développement web, puis adopté par des frameworks PHP tels que Symfony.
a. La vue
La vue représente la partie présentation de l’application. Elle désigne souvent des templates, qui sont des gabarits permettant de présenter des informations aux utilisateurs via une interface.
Dans une application web, un template contient principalement du HTML pour la mise en page, et du code (PHP ou autre) pour intégrer les données dynamiques issues du modèle.
b. Le modèle
Le modèle englobe les fonctionnalités de l’application. Il inclut les « classes métier » (Utilisateur, Produit, Commande, etc.) ainsi que celles chargées de leur manipulation et de leur lien avec la base de données.
Chaque classe du modèle a une responsabilité clairement délimitée pour assurer une meilleure organisation du code.
c. Le contrôleur
Le contrôleur est l’intermédiaire entre l’utilisateur et les couches Modèle et Vue. Il est composé d’une multitude d’actions, chaque action correspondant à une requête.
Le contrôleur contient uniquement de la logique d’application, tandis que les traitements sont délégués au modèle.
2. En pratique
La compatibilité avec le modèle MVC varie selon les frameworks. Certains l’affichent en page d’accueil, tandis que d’autres l’évoquent peu. Cependant, la plupart respectent ce modèle abstrait.
Prenons un exemple pour comprendre son fonctionnement au travers d’une requête HTTP :
GET /articles/introduction.html
a. Le contrôleur frontal
Le contrôleur frontal est le point d’entrée unique de l’application. Il amorce (« bootstrap ») l’application en interceptant les requêtes entrantes grâce à des modules de réécriture d’URL.
b. Le routage
Une fois l’application démarrée, le routage décide de l’action à exécuter pour traiter la requête. Dans cet exemple, il s’agit de l’action voir
du contrôleur Article
.
c. Le contrôleur et le modèle
Voici un exemple de contrôleur en PHP :
<?php
class ArticleControleur
{
public $modele;
public $vue;
public function voir($titre)
{
$article = $this->modele->chercherArticle($titre);
$this->vue->afficher(['article' => $article]);
}
}
Le contrôleur demande au modèle de rechercher l’article, puis le transmet à la vue pour affichage.
d. La vue
Enfin, la vue gère l’affichage des données dans une page HTML :
<!DOCTYPE html>
<html>
<body>
<h1><?php echo $article->getTitre(); ?></h1>
<p><?php echo $article->getContenu(); ?></p>
</body>
</html>
Le modèle MVC est un standard essentiel dans le développement d’applications web modernes. Les frameworks PHP comme Symfony, Zend Framework et Laravel l’utilisent largement, bien que la syntaxe puisse différer.