MVC : comment séparer proprement ce qu'on va de toute façon mélanger ensuite
On parle d'un truc qu'on vous répète sans cesse en entretien technique et que tout le monde prétend maîtriser : le MVC. Parce que ouais, dans le développement backend, t’as beau être bon, si tu ne fais pas de MVC, t’es suspecté d’être un imposteur ou pire : un développeur JavaScript !
MVC, c’est quoi ce truc ?
Alors MVC, pour les trois du fond qui codent encore comme en 2005, ça veut dire Model-View-Controller, ou comment diviser proprement le bordel que tu vas finir par créer de toute façon.
L’idée, elle est simple sur papier : chacun fait ce qu’il sait faire et arrête de venir embêter les autres.
-
Model : c’est le sérieux de l’équipe, le gars qui bosse vraiment. Il parle à la base de données, récupère les données, les traite et les prépare bien comme il faut. C’est un peu ton pote qui fait tout le boulot de groupe et que tu remercies en lui payant une bière à la fin.
-
View : c’est celui qui met les paillettes dans la vie du projet. Il prend ce que le modèle a préparé et fait en sorte que ça soit joli. Mais attention, joli, c’est subjectif hein, parce qu’on a tous croisé des vues qui feraient pleurer même un daltonien.
-
Controller : c’est le chef d'orchestre, celui qui fait croire à tout le monde qu’il bosse dur alors qu’il fait juste passer le boulot du modèle à la vue. C’est un peu l'intermédiaire inutile mais obligatoire, comme un chef de projet.
Exemple de MVC dans un projet Symfony
Le Controller
class ArticleController extends AbstractController
{
#[Route('/article/{id}', name: 'article_show')]
public function show(int $id, ArticleRepository $repository): Response
{
$article = $repository->find($id);
return $this->render('article/show.html.twig', ['article' => $article]);
}
}
Le Model (ou Repository)
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function find(int $id): ?Article
{
return $this->findOneBy(['id' => $id]);
}
}
La View (Twig)
<!-- templates/article/show.html.twig -->
<h1>{{ article.title }}</h1>
<p>{{ article.content }}</p>
Pourquoi MVC ?
MVC, ça te donne l’impression d’avoir une architecture super organisée, même quand tu développes à l’arrache. Ça permet de séparer clairement les responsabilités, pour que quand ça plante, tu saches exactement à qui gueuler dessus.
Bref, le MVC, c’est joli, c’est propre et ça sent bon les fleurs, mais seulement quand tu prends le temps de faire les choses proprement. Sinon, c’est juste un acronyme cool à balancer pour masquer ton bordel. Mais bon, l’essentiel, c’est que ça marche… ou pas…