// Architecture Logicielle — Référence Complète

Les grandes architectures
logicielles

Panorama des patterns architecturaux fondamentaux, de la couche monolithique aux systèmes distribués.

📖

La loi fondamentale de Robert C. Martin (Uncle Bob)

« Le but d'une bonne architecture est de minimiser les ressources humaines nécessaires pour construire et maintenir un système. » Une architecture n'est pas une technologie — c'est une décision sur ce qui peut changer facilement et ce qui doit rester stable. Elle sépare la politique (les règles métier) des détails (les frameworks, les bases de données, le réseau).

01

Architectures Monolithiques

🏛️
Monolith
Architecture Monolithique

Tout le système est déployé comme une seule unité. Simple à développer initialement, difficile à faire évoluer à grande échelle. La métaphore : un bloc de pierre — solide, mais sculptez-en une partie et vous risquez de tout fissurer.

Déploiement uniqueBase de code unifiéeSimple
🍰
Layered / N-Tier
Architecture en Couches

Organisation en couches horizontales : Présentation → Logique Métier → Accès aux données → Base de données. Uncle Bob critique le fait que les couches inférieures dictent souvent les couches supérieures — le schéma DB ne doit pas dicter les entités métier.

3-TierMVCSéparation concerns
« Les détails doivent dépendre des politiques, jamais l’inverse. »
🎭
MVC / MVP / MVVM
Patterns Présentation

Séparation de la vue, du modèle et du contrôleur/présenteur/viewmodel. Patterns de présentation plutôt qu’architecturaux au sens strict, mais fondamentaux dans la structuration du code d’interface.

ModelViewControllerPresenter
02

Architectures "Propres" — École Uncle Bob

03

Architectures Orientées Services

🔌
SOA
Service-Oriented Architecture

Services réutilisables communiquant via un ESB (Enterprise Service Bus). Précurseur des microservices, souvent plus lourd. Populaire dans les grandes entreprises années 2000. L’ESB peut devenir un point de défaillance unique.

ESBWSDLSOAPEnterprise
🔬
Microservices
Architecture Microservices

Services petits, indépendants, déployables séparément. Chaque service possède sa propre base de données. Communication via REST, gRPC ou messages. Scalabilité fine, mais complexité opérationnelle élevée. La métaphore : un banc de poissons vs un requin.

Déploiement indépendantAPI GatewayDockerKubernetes
Martin Fowler : « Ne commencez pas avec les microservices. »
🌐
Serverless / FaaS
Architecture Sans Serveur

Fonctions déployées à la demande (AWS Lambda, Azure Functions). L’infrastructure est totalement abstraite. Facturation à l’usage. Idéal pour les charges variables. Limite : cold starts, état difficile à gérer, vendor lock-in.

LambdaEvent-drivenPay-per-useStateless
04

Architectures Événementielles & Réactives

EDA
Event-Driven Architecture

Les composants communiquent via des événements asynchrones (Kafka, RabbitMQ). Découplage fort : le producteur ignore qui consomme. Parfait pour les flux temps réel. La métaphore : la radio FM — elle émet sans savoir combien d’auditeurs l’écoutent.

KafkaAsyncPub/SubDécouplage
📜
Event Sourcing
Sourcing par Événements

L’état du système est reconstruit en rejouant une séquence d’événements immuables. Auditabilité totale. La métaphore : un journal comptable — on ne rature jamais, on passe une écriture de correction. Souvent combiné avec CQRS.

ImmutabilitéAudit TrailReplayAppend-only
✂️
CQRS
Command Query Responsibility Segregation

Séparer les modèles d’écriture (Commands) et de lecture (Queries). Optimiser chaque côté indépendamment. La lecture peut avoir ses propres vues dénormalisées. Complexité accrue mais performances et scalabilité supérieures.

CommandsQueriesRead ModelWrite Model
05

Architectures Modulaires & Composants

🧩
Plugin
Architecture Plugin (Microkernel)

Un noyau stable expose des points d’extension. Les fonctionnalités sont des plugins indépendants. Uncle Bob : le système central ne dépend PAS des plugins, c’est l’inverse. Exemple canonique : un IDE avec ses extensions.

MicrokernelExtension PointsStable Core
« Protégez le noyau des détails volatils. »
🏗️
Component-Based
Architecture par Composants

Décomposition en composants autonomes, réutilisables, avec interfaces claires. Chaque composant encapsule son état et sa logique. Fondement des frameworks modernes (React, Vue, Web Components). Favorise la réutilisabilité.

EncapsulationRéutilisabilitéInterface
🌿
Modular Monolith
Monolithe Modulaire

Un seul déploiement mais une structure interne fortement modulaire avec frontières claires entre modules. Le meilleur des deux mondes : simplicité opérationnelle du monolithe + séparation des préoccupations des microservices. Recommandé comme étape avant microservices.

Modules isolésDéploiement simpleBounded Modules
06

Architectures Distribuées & Cloud-Native

🕸️
Service Mesh
Architecture Service Mesh

Couche d’infrastructure dédiée à la communication inter-services (Istio, Linkerd). Gère : la découverte, le load balancing, le chiffrement, l’observabilité. La logique réseau sort du code applicatif pour aller dans le mesh.

IstioSidecar ProxymTLSObservabilité
🔄
Saga Pattern
Architecture Saga

Gestion des transactions distribuées sans 2PC. Séquence de transactions locales compensées en cas d’échec. Deux modes : Choreography (événements) ou Orchestration (saga orchestrateur central). Complexe mais incontournable en microservices.

Transactions distribuéesCompensationEventual Consistency
📡
Micro-Frontends
Micro-Frontends

Application du principe microservices au frontend. Chaque équipe possède sa slice verticale complète : backend + frontend. Indépendance de déploiement, de technologie. Module Federation (Webpack) en est l’implémentation moderne.

Module FederationAutonomie équipeVertical Slice