Pourquoi l'architecture n'est pas une question de schémas ennuyeux
Imaginez que vous construisez une maison. Vous pouvez simplement empiler des briques, couler du béton et espérer que la structure ne s'effondre pas. Ou vous pouvez concevoir les fondations, les murs porteurs et les planchers. En développement JavaScript, c'est la même chose : sans une architecture réfléchie, votre projet se transforme en "code spaghetti", où la modification d'une seule fonction casse toute l'application.
Les modèles architecturaux ne sont pas une théorie aride tirée de livres. Ce sont des schémas de combat éprouvés qui vous aideront à :
- Ne pas perdre la tête lorsque le projet atteint 50 000 lignes de code.
- Trouver rapidement les bugs, car le code est divisé en blocs logiques.
- Ajouter des fonctionnalités sans craindre de casser quelque chose.
Dans cet article, nous allons analyser cinq modèles clés pour les applications JavaScript : du MVC classique à l'approche modulaire. C'est parti !
MVC (Model-View-Controller) : le grand-père de tous les modèles
Le MVC est le standard de référence du développement web. Ce modèle divise l'application en trois couches :
- Model — les données et la logique métier (CRUD, validation).
- View — l'interface que voit l'utilisateur (HTML, rendu).
- Controller — l'intermédiaire : il reçoit les requêtes de l'utilisateur et met à jour le Model ou la View.
Voici à quoi cela ressemble en code :
// Modelclass UserModel { constructor() { this.users = []; }
addUser(user) { this.users.push(user); }
getUsers() { return this.users; }}
// Viewclass UserView { render(users) { const list = document.getElementById('user-list'); list.innerHTML = users.map(u => `<li>${u.name}</li>`).join(''); }}
// Controllerclass UserController { constructor(model, view) { this.model = model; this.view = view; }
addUser(name) { this.model.addUser({ name, id: Date.now() }); this.view.render(this.model.getUsers()); }}
// Utilisationconst model = new UserModel();const view = new UserView();const controller = new UserController(model, view);controller.addUser('Alice');controller.addUser('Bob');Quand utiliser MVC en JavaScript ? Idéal pour les SPA (applications monopages) de taille moyenne à grande. Mais attention : si la View dépend fortement du Model, le modèle se transforme en "Massive View Controller" — le contrôleur gonfle démesurément.
MVP (Model-View-Presenter) : le superviseur strict
Le MVP est une évolution du MVC, où le Presenter prend en charge toute la logique de gestion de la View. Contrairement au MVC, la View dans le MVP est une couche passive et "stupide". Elle se contente d'afficher les données et de transmettre les événements au Presenter.
// Model (identique à celui du MVC)class UserModel { constructor() { this.users = []; } addUser(user) { this.users.push(user); } getUsers() { return this.users; }}
// View — interface passiveclass UserView { constructor() { this.list = document.getElementById('user-list'); this.addButton = document.getElementById('add-btn'); }
bindAddUser(handler) { this.addButton.addEventListener('click', () => { const name = prompt('Entrez le nom :'); if (name) handler(name); }); }
render(users) { this.list.innerHTML = users.map(u => `<li>${u.name}</li>`).join(''); }}
// Presenter — le cerveau de l'applicationclass UserPresenter { constructor(model, view) { this.model = model; this.view = view; this.view.bindAddUser(this.handleAddUser.bind(this)); this.view.render(this.model.getUsers()); }
handleAddUser(name) { this.model.addUser({ name, id: Date.now() }); this.view.render(this.model.getUsers());