MFormations
Modern Information Systems Engineering

Chapitre 15

15 - Design Systems & Patterns

15 - Design Systems & Patterns

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

PatternProblèmeSolution
SingletonUne seule instance globaleContrôle du constructeur
FactoryCréation sans exposer la logiqueMéthode de fabrique
Abstract FactoryFamille d'objets liésInterface de fabrique
BuilderConstruction complexe étape par étapeObjet Builder
PrototypeClonage d'objetsCopie d'instance

15.2.2 Patterns Structurels

PatternProblèmeSolution
AdapterInterface incompatibleWrapper
BridgeAbstraction et implémentation variablesPont entre les deux
CompositeTraitement uniforme d'objets individuels/composésStructure arborescente
DecoratorAjout dynamique de responsabilitésEnchaînement de wrappers
FacadeSous-système complexeInterface simplifiée
ProxyContrôle d'accès à un objetObjet intermédiaire

15.2.3 Patterns Comportementaux

PatternProblèmeSolution
StrategyAlgorithmes interchangeablesEncapsulation par interface
ObserverNotification de changement à plusieursAbonnement / Publication
CommandEncapsuler une requête en objetObjet commande
StateChangement de comportement selon étatObjet état
Template MethodSquellette d'algorithmeMéthode abstraite
Chain of ResponsibilityTraitement par plusieurs handlersChaî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

PatternDescriptionQuand l'utiliser
Transaction ScriptLogique dans des scripts procédurauxLogique simple
Domain ModelModèle objet riche (DDD)Logique complexe
Table ModuleLogique 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

PatternProblèmeSolution
Remote FacadeAppels distants coûteuxInterface grossière
Data Transfer ObjectDonnées échangéesObjet sérialisable
Service LayerLogique transverseCouche 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

PatternDescription
Content-Based RouterRoute selon le contenu
Message FilterFiltre selon critères
SplitterDivise un message en plusieurs
AggregatorAgrège plusieurs messages en un
ResequencerRemet dans l'ordre
Recipient ListEnvoie à 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èmePatternAlternatives
CRUD simpleTransaction ScriptActive Record
Logique métier richeDomain ModelDDD
API RESTREST + OpenAPIGraphQL, gRPC
Communication asyncEvent-DrivenMessage Queue
Performance requêtesCQRSRead Models
TraçabilitéEvent SourcingAudit tables
RésilienceCircuit BreakerRetry, Bulkhead
ScalabilitéMicroservicesModular 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

PatternAvantagesInconvénients
MicroservicesScalabilité, autonomieComplexité réseau
CQRSOptimisation lecture/écritureComplexité, cohérence éventuelle
Event SourcingTraçabilité complètePerformance lecture, versioning
SagaTransactions distribuéesComplexité des compensations
API GatewayPoint d'entrée uniqueSPOF potentiel
Event-DrivenDécouplageDebug 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-patternProblèmeSolution
Big Ball of MudArchitecture spaghettiRefactoring, DDD
Lava FlowCode mort non nettoyéNettoyage régulier
Golden HammerPattern appliqué partoutChoisir le bon outil
God ClassClasse qui fait toutDiviser en SRP
Copy-Paste ProgrammingDuplication de codeFactoriser
Vendor Lock-inDépendance à un fournisseurAbstraction, 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, VlissidesDesign Patterns: Elements of Reusable Object-Oriented Software (GoF, 1994)
  • Martin FowlerPatterns of Enterprise Application Architecture (PoEAA, 2002)
  • Gregor Hohpe, Bobby WoolfEnterprise Integration Patterns (2003)
  • Chris RichardsonMicroservices Patterns (2019)
  • Robert C. MartinClean Architecture (2017)