Chapitre 15 : Design Systems & Patterns
Introduction
Les patterns d'architecture sont des solutions éprouvées à des problèmes récurrents. Ce chapitre présente un catalogue structuré des principaux patterns, leur contexte d'utilisation, et leurs trade-offs. Il s'appuie sur les travaux du GoF (1994), de Fowler (PoEAA, 2002), et de Hohpe (Enterprise Integration Patterns, 2003).
15.1 Qu'est-ce qu'un pattern ?
15.1.1 Définition
Un pattern décrit une solution récurrente à un problème dans un contexte donné.
┌─────────────────────────────────────────┐
│ Pattern │
├─────────────────────────────────────────┤
│ Nom : identifiant du pattern │
│ Contexte : quand l'appliquer │
│ Problème : ce qu'il résout │
│ Solution : comment │
│ Conséquences : trade-offs │
└─────────────────────────────────────────┘
15.1.2 Pattern Language
Un pattern language est un réseau de patterns interconnectés :
Diagramme en cours de génération...
15.1.3 Catalogue des patterns
Diagramme en cours de génération...
15.2 GoF Patterns (Gang of Four)
15.2.1 Patterns de Création
| Pattern | Problème | Solution |
|---|
| Singleton | Une seule instance globale | Contrôle du constructeur |
| Factory | Création sans exposer la logique | Méthode de fabrique |
| Abstract Factory | Famille d'objets liés | Interface de fabrique |
| Builder | Construction complexe étape par étape | Objet Builder |
| Prototype | Clonage d'objets | Copie d'instance |
15.2.2 Patterns Structurels
| Pattern | Problème | Solution |
|---|
| Adapter | Interface incompatible | Wrapper |
| Bridge | Abstraction et implémentation variables | Pont entre les deux |
| Composite | Traitement uniforme d'objets individuels/composés | Structure arborescente |
| Decorator | Ajout dynamique de responsabilités | Enchaînement de wrappers |
| Facade | Sous-système complexe | Interface simplifiée |
| Proxy | Contrôle d'accès à un objet | Objet intermédiaire |
15.2.3 Patterns Comportementaux
| Pattern | Problème | Solution |
|---|
| Strategy | Algorithmes interchangeables | Encapsulation par interface |
| Observer | Notification de changement à plusieurs | Abonnement / Publication |
| Command | Encapsuler une requête en objet | Objet commande |
| State | Changement de comportement selon état | Objet état |
| Template Method | Squellette d'algorithme | Méthode abstraite |
| Chain of Responsibility | Traitement par plusieurs handlers | Chaîne de responsabilité |
15.2.4 GoF — Diagramme des relations
Diagramme en cours de génération...
15.3 Enterprise Patterns (PoEAA — Fowler)
15.3.1 Patterns de Layered Architecture
Diagramme en cours de génération...
15.3.2 Domain Logic Patterns
| Pattern | Description | Quand l'utiliser |
|---|
| Transaction Script | Logique dans des scripts procéduraux | Logique simple |
| Domain Model | Modèle objet riche (DDD) | Logique complexe |
| Table Module | Logique dans des classes liées aux tables | .NET DataSet |
15.3.3 Data Source Patterns
Diagramme en cours de génération...
15.3.4 Patterns de Distribution
| Pattern | Problème | Solution |
|---|
| Remote Facade | Appels distants coûteux | Interface grossière |
| Data Transfer Object | Données échangées | Objet sérialisable |
| Service Layer | Logique transverse | Couche de services |
15.4 Enterprise Integration Patterns (Hohpe)
15.4.1 Messaging Patterns
Diagramme en cours de génération...
15.4.2 Routage Patterns
| Pattern | Description |
|---|
| Content-Based Router | Route selon le contenu |
| Message Filter | Filtre selon critères |
| Splitter | Divise un message en plusieurs |
| Aggregator | Agrège plusieurs messages en un |
| Resequencer | Remet dans l'ordre |
| Recipient List | Envoie à une liste de destinataires |
15.4.3 Exemple de routage
Diagramme en cours de génération...
15.5 Architecture Decision Catalogue
15.5.1 Quand utiliser quel pattern ?
Diagramme en cours de génération...
15.5.2 Matrice de décision
| Problème | Pattern | Alternatives |
|---|
| CRUD simple | Transaction Script | Active Record |
| Logique métier riche | Domain Model | DDD |
| API REST | REST + OpenAPI | GraphQL, gRPC |
| Communication async | Event-Driven | Message Queue |
| Performance requêtes | CQRS | Read Models |
| Traçabilité | Event Sourcing | Audit tables |
| Résilience | Circuit Breaker | Retry, Bulkhead |
| Scalabilité | Microservices | Modular Monolith |
15.6 Trade-offs
15.6.1 Principes généraux
Diagramme en cours de génération...
Tout pattern a un coût :
- Complexité ajoutée
- Courbe d'apprentissage
- Maintenance
- Performance
15.6.2 Exemples de trade-offs
| Pattern | Avantages | Inconvénients |
|---|
| Microservices | Scalabilité, autonomie | Complexité réseau |
| CQRS | Optimisation lecture/écriture | Complexité, cohérence éventuelle |
| Event Sourcing | Traçabilité complète | Performance lecture, versioning |
| Saga | Transactions distribuées | Complexité des compensations |
| API Gateway | Point d'entrée unique | SPOF potentiel |
| Event-Driven | Découplage | Debug complexe |
15.6.3 Le principe YAGNI
"You Ain't Gonna Need It" — N'ajoutez pas un pattern dont vous n'avez pas besoin.
Diagramme en cours de génération...
15.7 Anti-patterns
15.7.1 Anti-patterns d'architecture
| Anti-pattern | Problème | Solution |
|---|
| Big Ball of Mud | Architecture spaghetti | Refactoring, DDD |
| Lava Flow | Code mort non nettoyé | Nettoyage régulier |
| Golden Hammer | Pattern appliqué partout | Choisir le bon outil |
| God Class | Classe qui fait tout | Diviser en SRP |
| Copy-Paste Programming | Duplication de code | Factoriser |
| Vendor Lock-in | Dépendance à un fournisseur | Abstraction, standards |
15.7.2 Comment éviter les anti-patterns ?
Diagramme en cours de génération...
15.8 Pattern Language pour notre cours
Diagramme en cours de génération...
Références
- Gamma, Helm, Johnson, Vlissides — Design Patterns: Elements of Reusable Object-Oriented Software (GoF, 1994)
- Martin Fowler — Patterns of Enterprise Application Architecture (PoEAA, 2002)
- Gregor Hohpe, Bobby Woolf — Enterprise Integration Patterns (2003)
- Chris Richardson — Microservices Patterns (2019)
- Robert C. Martin — Clean Architecture (2017)