Comparatif
des Architectures
MVC · MVVM · Client-Serveur · Hexagonale — comprendre les différences, choisir le bon pattern selon le contexte, et valider les acquis avec le quiz.
Vue d'ensemble — 4 patterns, 4 niveaux
Ces quatre patterns ne sont pas en compétition directe. Ils répondent à des questions différentes à des niveaux différents d'une application. On peut — et souvent on doit — les combiner.
| Pattern | Question fondamentale | Niveau |
|---|---|---|
| Client-Serveur | Où tourne chaque partie ? | Réseau / système |
| MVC | Comment organiser le code back ? | Structure du code |
| MVVM | Comment lier données et interface ? | Interface utilisateur |
| Hexagonale | Comment isoler la logique métier ? | Architecture profonde |
Un projet typique peut combiner les 4 : Client-Serveur pour séparer front et back, MVC ou Hexagonale côté back, MVVM côté front (Vue/React). Les patterns se superposent, ils ne s'excluent pas.
Graphe comparatif
| Critère | MVC | MVVM | C-S | Hexa |
|---|---|---|---|---|
| Simplicité | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐ |
| Testabilité | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| Scalabilité | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| Réactivité UI | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐ | ⭐ |
| Isolation métier | ⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Maturité / adoption | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| Courbe d'apprent. | Faible | Moyenne | Faible | Élevée |
Tableau détaillé
| Aspect | MVC | MVVM | Client-Serveur | Hexagonale |
|---|---|---|---|---|
| Inventé par | Reenskaug, 1979 | Gossman (Microsoft), 2005 | Années 60 (mainframes) | Cockburn, 2005 |
| Composants | Model, View, Controller | Model, View, ViewModel | Client, Serveur, Réseau | Domaine, Application, Infrastructure |
| Flux des données | Controller → Model → View | Bidirectionnel VM ↔ View | Requête → Réponse | Adapter → UseCase → Entité |
| Framework typique | Django, Rails, Laravel, Express+EJS | Vue.js, React, Angular | Express, Flask, Nginx | Indépendant du framework |
| Où appliqué | Côté serveur ou client | Côté client (SPA) | Entre machines / tiers | Côté serveur (domaine) |
| Taille projet idéale | Petite à moyenne | Moyenne à grande SPA | Tout | Moyenne à grande |
| Tests unitaires | Bons (Model isolable) | Bons (ViewModel isolable) | Moyens (dépend du réseau) | Excellents (domaine sans deps) |
| Changer de BDD | Difficile (ORM couplé) | N/A (côté front) | Dépend du tier | Facile (swap adapter) |
| Manipulation DOM | Manuelle | Automatique (réactivité) | N/A | N/A |
| Anti-pattern commun | Fat Controller, SQL dans View | Logique dans la View, store partout | Logique dans le client | Logique infra dans le domaine |
Scénarios concrets — quoi utiliser ?
→ MVC (Flask/Django)
→ Client-Serveur + MVVM (Vue/React)
→ Client-Serveur + MVC back + MVVM front
→ Hexagonale (isoler le domaine)
→ MVVM (Vue/React + store Pinia/Zustand)
→ Client-Serveur + WebSocket
→ MVC back (Express/Flask) + MVVM front (Vue)
→ Hexagonale (domaine testé exhaustivement)
Arbre de décision
Règle pratique pour la HEH : pour un projet de cours ou de fin d'études, commencer par MVC + Client-Serveur. Si la logique métier devient complexe et que les tests deviennent difficiles à écrire, migrer progressivement vers l'hexagonale.
La règle universelle : l'architecture doit servir le projet, pas l'inverse. Un CRUD de 5 tables en hexagonale complète = 3x plus de fichiers pour aucun bénéfice tangible. Un système bancaire en MVC plat = dette technique assurée.
Piège fréquent : utiliser MVVM quand MVC avec templates suffit, parce que React/Vue "c'est moderne". Le surcoût en complexité doit être justifié par de vraies interactions côté client.
Combinaisons réelles en production
┌────────────────────────────────────────────┐
│ ARCHITECTURE FINALE │
│ │
│ 🌐 Client-Serveur (niveau réseau) │
│ Client : port 5173 ↔ API : port 3000 │
│ │
│ ┌──────────────────┐ ┌─────────────────┐ │
│ │ 🔄 MVVM (front) │ │ 🎮 MVC (back) │ │
│ │ Vue 3 + Pinia │ │ Express + ORM │ │
│ │ Components │ │ Controllers │ │
│ │ Composables │ │ Models │ │
│ └──────────────────┘ └─────────────────┘ │
│ ↕ JSON / REST / WebSocket │
└────────────────────────────────────────────┘
┌────────────────────────────────────────────┐
│ ARCHITECTURE AVANCÉE │
│ │
│ 🌐 Client-Serveur │
│ ┌──────────────────┐ ┌─────────────────┐ │
│ │ 🔄 MVVM (front) │ │ ⬡ Hexagonale │ │
│ │ React + Zustand │ │ (back) │ │
│ │ │ │ Domain │ │
│ │ │ │ Application │ │
│ │ │ │ Infra/Adapters │ │
│ └──────────────────┘ └─────────────────┘ │
│ ↕ FastAPI (REST) / gRPC │
└────────────────────────────────────────────┘
| Entreprise / Projet | Stack architecture |
|---|---|
| Netflix | Client-Serveur + microservices + MVVM (React) |
| Airbnb | Client-Serveur + React (MVVM) + Rails (MVC) back |
| Application bancaire | Client-Serveur + MVVM front + Hexagonale back |
| Site vitrine PME | MVC seul (Django/Laravel) |
| Projet HEH standard | Client-Serveur + MVC (Express) + MVVM (Vue) |
| App mobile + web | Client-Serveur + Hexagonale back + MVVM × 2 fronts |
Pattern le plus fréquent en entreprise 2024 : API REST (Node.js ou Python) organisée en MVC ou hexagonale + front-end SPA en Vue ou React (MVVM) + déployés séparément (Client-Serveur). C'est exactement ce qu'on apprend à la HEH.