Modélisation¶
Communiquer une architecture avant de l'écrire — les diagrammes comme outil de pensee et de validation.
Pourquoi modéliser¶
Un diagramme n'est pas une documentation après coup. C'est un outil de réflexion : dessiner un système révélé ses incohérences avant qu'elles deviennent du code.
Trois raisons de modéliser :
- Communication : aligner l'équipe sur une vision partagee en 10 minutes plutôt qu'en 10 jours de code
- Validation : détecter les problèmes de conception (cycles, couplage excessif) avant qu'ils soient coûteux
- Documentation vivante : un diagramme as code est versionne avec le code et reste à jour
UML — les trois diagrammes utiles¶
UML contient 14 types de diagrammes. Dans la pratique quotidienne, trois couvrent 90% des besoins.
Diagramme de classes¶
Pour modéliser les entités et leurs relations :
classDiagram
class Order {
+String id
+String status
+add_item(product, qty)
+total() float
+confirm()
}
class OrderItem {
+String product_id
+int quantity
+float unit_price
+subtotal() float
}
class Customer {
+String id
+String email
}
Order "1" --> "*" OrderItem : contient
Order "*" --> "1" Customer : appartient a Quand l'utiliser : explorer un modèle de domaine, documenter les entités clés, onboarder un nouveau développeur.
Diagramme de sequence¶
Pour modéliser les interactions entre composants dans le temps :
sequenceDiagram
participant Client
participant API
participant UseCase
participant Repository
participant DB
Client->>API: POST /orders
API->>UseCase: create_order(command)
UseCase->>Repository: find_customer(id)
Repository->>DB: SELECT ...
DB-->>Repository: customer row
Repository-->>UseCase: Customer
UseCase->>Repository: save(order)
Repository->>DB: INSERT ...
DB-->>Repository: ok
UseCase-->>API: OrderCreated
API-->>Client: 201 Created Quand l'utiliser : debugger un flux complexe, désigner un protocole, expliquer une intégration avec un tiers.
Diagramme d'activité¶
Pour modéliser un processus métier ou un algorithme :
flowchart TD
A([Commande recue]) --> B{Stock disponible ?}
B -- Oui --> C[Reserver stock]
B -- Non --> D[Notifier rupture]
D --> E([Fin])
C --> F{Paiement valide ?}
F -- Non --> G[Liberer stock]
G --> H[Notifier echec]
H --> E
F -- Oui --> I[Confirmer commande]
I --> J[Envoyer email]
J --> E Quand l'utiliser : clarifier une règle métier avec un product owner, documenter un workflow d'approbation.
C4 Model¶
Le C4 Model (Simon Brown) propose quatre niveaux de zoom pour décrire un système logiciel.
graph TD
subgraph L1["Niveau 1 — Contexte (zoom out)"]
U1["Utilisateur"] --> S["Systeme"]
S --> EXT["Systeme externe"]
end
subgraph L2["Niveau 2 — Conteneurs"]
WEB["Web App"] --> API2["API Backend"]
API2 --> DB2["Base de donnees"]
end
subgraph L3["Niveau 3 — Composants"]
CTRL["OrderController"] --> UC2["CreateOrderUseCase"]
UC2 --> REPO["OrderRepository"]
end | Niveau | Audience | Contenu |
|---|---|---|
| Contexte | Tout le monde | Le système et ses acteurs/dépendances externes |
| Conteneurs | Équipe technique | Applications, services, bases de données |
| Composants | Développeurs | Modules, packages, use cases d'un conteneur |
| Code | Développeurs (rare) | Classes et interfaces (généré par l'IDE en général) |
Ne modelisez pas le niveau Code
Le niveau C4 Code (classes) est rarement utile manuellement — votre IDE le généré mieux que vous. Concentrez votre énergie sur les niveaux Contexte et Conteneurs, qui restent stables et communiquent l'essentiel.
Diagrammes as code¶
Les diagrammes dans des fichiers image (PNG, Visio) vieillissent mal et ne se versionnent pas. Les diagrammes as code vivent dans le dépôt git.
Mermaid (recommande pour MkDocs)¶
Supporte nativement par GitHub, GitLab et MkDocs Material. Syntaxe simple, rendu correct.
### PlantUML
```plantuml
@startuml
class Order {
+confirm()
}
@enduml
Plus expressif que Mermaid pour l'UML complet, mais nécessité un serveur de rendu ou un plugin.
Structurizr DSL (pour C4)¶
workspace {
model {
user = person "Utilisateur"
system = softwareSystem "E-commerce" {
api = container "API" "FastAPI"
db = container "Database" "PostgreSQL"
}
user -> api "utilise"
api -> db "lit/ecrit"
}
}
Quel diagramme pour quel besoin¶
| Besoin | Diagramme recommande |
|---|---|
| Expliquer le système a un stakeholder | C4 Contexte |
| Onboarder un nouveau développeur | C4 Conteneurs + Composants |
| Désigner un modèle de domaine | UML Classes |
| Debugger un flux d'appels | UML Sequence |
| Documenter un processus métier | UML Activité / Flowchart |
| Architecture microservices | C4 Conteneurs |
| Communication entre services | UML Sequence |
Un diagramme = une question
Avant de dessiner, ecrivez la question a laquelle le diagramme doit répondre. Un diagramme qui répond à tout répond en fait a rien. Gardez chaque diagramme concentre sur une seule vue, un seul niveau d'abstraction.