Que fait Générateur de Diagrammes de Conteneurs C4 ?
Génère des diagrammes de conteneurs C4 suivant les conventions du modèle C4, exportés sous forme de fichiers .drawio XML éditables qui s'ouvrent directement dans draw.io (desktop ou web).
Quand l'utiliser
Déclencheurs explicites :
- L'utilisateur demande un diagramme C4, un diagramme de conteneurs, ou un diagramme d'architecture
- L'utilisateur dit "dessine l'architecture", "diagramme système", "montre-moi les composants"
- L'utilisateur a besoin de visualiser l'architecture d'un système pour une documentation ou une présentation
- L'utilisateur mentionne draw.io, drawio, ou souhaite un diagramme éditable
Déclencheurs proactifs :
- Explication d'un système avec 3 composants ou plus qui interagissent
- Discussion sur des microservices, APIs, bases de données et leurs relations
- Revue ou conception d'architecture système
Passer quand :
- L'utilisateur veut un simple organigramme (utiliser Mermaid à la place)
- L'utilisateur veut des maquettes d'interface utilisateur
- Le système a moins de 3 composants
Processus
Étape 1 : Recueillir les exigences
Identifier à partir de la conversation ou demander à l'utilisateur :
- Quel système diagrammons-nous ?
- Quels sont les utilisateurs/acteurs (Personne) ?
- Quels conteneurs existent (applications, services, bases de données, files d'attente, stockage de fichiers) ?
- À quels systèmes externes interagit-il ?
- Quels sont les flux de données et protocoles clés ?
Si l'utilisateur fournit un cahier des charges, une description de code source, ou un aperçu d'architecture, extraire les éléments automatiquement et confirmer avant de générer.
Étape 2 : Classifier les éléments
Mapper chaque élément à une catégorie C4 :
| Catégorie | Couleur | Forme | Description |
|---|---|---|---|
| Personne | #08427B (bleu foncé) | shape=actor + étiquette de texte | Utilisateurs, acteurs, rôles |
| Conteneur | #438DD5 (bleu) | Rectangle arrondi | Applications, services, APIs |
| Base de données | #438DD5 (bleu) | Cylindre | Tout magasin de données (SQL, NoSQL, fichiers) |
| File d'attente / Broker | #438DD5 (bleu) | Rectangle arrondi avec étiquette | Files de messages, bus d'événements |
| Système externe | #999999 (gris) | Rectangle arrondi | Services tiers, APIs |
| Limite système | aucun (transparent) | Rectangle en pointillés | Regroupe les conteneurs internes |
Référence : references/element-templates.md pour les modèles XML draw.io exacts.
Étape 3 : Planifier la disposition
Appliquer une disposition en couches stricte (de haut en bas) :
Couche 1 (y ~= 20) : Éléments Personne (acteurs)
Couche 2 (y ~= 250) : Limite système contenant les conteneurs internes
Couche 3 (y ~= 700+) : Systèmes externes
Règles de disposition :
- Chaque élément reçoit des coordonnées x, y explicites (pas de disposition automatique)
- 200px d'espace horizontal minimum entre les éléments sur la même couche
- 200px d'espace vertical minimum entre les couches
- Limite système = rectangle en pointillés entourant tous les conteneurs internes avec un rembourrage de 40px
- Ordonner les éléments de gauche à droite en suivant la direction du flux de données principal
- Grouper les conteneurs apparentés dans des sous-limites si le système comporte des sous-systèmes distincts
- Garder la largeur du diagramme sous 1600px pour la lisibilité
- Centrer les éléments horizontalement dans leur couche
Minimiser les croisements de lignes :
- Placer les éléments qui communiquent fréquemment les uns à côté des autres
- Router les connexions verticalement quand c'est possible
- Éviter les lignes diagonales traversant d'autres éléments
- Pas de flèches traversant des conteneurs non liés : si A se connecte à C, la flèche ne doit PAS passer par B. Corriger en : (a) plaçant A et C adjacents, (b) utilisant des points de sortie/entrée explicites, ou (c) réorganisant la disposition
- Les étiquettes de flèche ne doivent pas chevaucher le texte du conteneur : utiliser
labelBackgroundColor=#ffffffsur toutes les arêtes, et utiliser un décalage perpendiculaire (ydans mxGeometry) pour éloigner les étiquettes des conteneurs
Étape 4 : Définir les connexions
Pour chaque connexion, spécifier :
- Élément source et cible
- Étiquette : action + protocole (ex : "Lit/Écrit [SQL/TCP]", "Envoie des événements [AMQP]")
- Style : trait plein = appel synchrone, trait pointillé = asynchrone (événements, files d'attente, webhooks)
- Direction : toujours source -> cible (suivre le flux de données)
Règles de connexion :
- Chaque flèche doit avoir une étiquette (pas de connexions sans étiquette) - si une étiquette chevauche, corriger la disposition ou le décalage, ne jamais supprimer l'étiquette
- Toujours inclure
labelBackgroundColor=#ffffffdans les styles de connexion - Utiliser le suffixe
[Protocole]:[REST/JSON],[gRPC],[SQL],[AMQP],[WebSocket] - Flux bidirectionnels : utiliser deux flèches séparées avec des étiquettes distinctes
- Auto-référence : éviter (restructurer le diagramme à la place)
Étape 5 : Générer le XML .drawio
Utiliser la structure XML de references/drawio-template.md comme base.
Construire le XML en suivant ces règles :
- Commencer par l'enveloppe
<mxfile>et<mxGraphModel>avec les dimensions appropriées - Ajouter les cellules racines (id="0" et id="1")
- Ajouter d'abord les rectangles de limite système (ils sont parents des éléments contenus)
- Ajouter tous les éléments avec une géométrie explicite (x, y, largeur, hauteur)
- Ajouter toutes les connexions avec les références source/cible
- Ajouter la légende dans le coin inférieur droit
Dimensionnement des éléments :
- Personne : 40 x 60px pour l'acteur + 220 x 60px pour l'étiquette de texte en dessous
- Conteneur : 240 x 120px
- Base de données (cylindre) : 240 x 120px
- Système externe : 240 x 120px
- Limite système : calculée pour englober les enfants + rembourrage de 40px de chaque côté
Étape 6 : Ajouter la légende
Chaque diagramme doit inclure une légende. La placer dans le coin inférieur droit.
La légende doit montrer :
- Personne = bonhomme bâton bleu foncé (#08427B)
- Conteneur = rectangle arrondi bleu (#438DD5)
- Base de données = cylindre bleu (#438DD5)
- Système externe = rectangle arrondi gris (#999999)
- Flèche pleine = flux synchrone
- Flèche pointillée = flux asynchrone
Référence : references/legend-template.md pour le XML exact.
Étape 7 : Sauvegarder et valider
Sauvegarder dans le chemin demandé par l'utilisateur, ou par défaut dans ./c4_[nom_du_système].drawio.
Liste de validation :
- Tous les éléments ont des coordonnées x, y explicites
- Les couches sont de haut en bas : Personne -> Limite système -> Externe
- La limite système engloble tous les conteneurs internes
- La légende est présente dans le coin inférieur droit
- Pas d'éléments qui se chevauchent (vérifier les coordonnées + dimensions)
- Croisements de lignes minimaux
- Chaque connexion a une étiquette avec protocole
- Traits pleins = synchrone, traits pointillés = asynchrone
- Les couleurs de police sont blanches (#ffffff) sur les arrière-plans colorés
- Le fichier s'ouvre correctement dans draw.io (structure XML valide)
Règles du modèle C4
Suivre les contraintes du diagramme de conteneurs C4 :
- Le diagramme de conteneurs montre les choix technologiques de haut niveau et comment les conteneurs communiquent
- Chaque conteneur est une unité déployable/exécutable séparément (pas une classe ou un module)
- Ne pas mélanger les niveaux C4 : cette compétence génère uniquement le niveau Conteneur
- Pour les détails au niveau Composant à l'intérieur d'un conteneur, créer un diagramme séparé
- Les éléments Personne représentent des rôles, pas des individus
- Les systèmes externes sont tout ce qui se trouve en dehors de la limite système et que l'équipe ne possède pas
Anti-patrons
- PAS de disposition automatique - toujours utiliser des coordonnées x, y explicites pour des résultats prévisibles
- PAS de flèches sans étiquette - chaque connexion a besoin d'une action et d'un protocole
- PAS de légende manquante - la légende est obligatoire sur chaque diagramme
- PAS de disposition trop serrée - maintenir des espacements minimaux entre les éléments
- PAS de niveaux C4 mélangés - niveau Conteneur uniquement (pas de classes, pas d'infrastructure)
- PAS de texte invisible - s'assurer que la couleur de la police contraste avec l'arrière-plan
- PAS de dimensions codées en dur - calculer la taille de la limite système à partir des enfants
- PAS de formes
mxgraph.c4.*- elles nécessitent la bibliothèque de formes C4 qui N'EST PAS chargée par défaut dans draw.io. Utiliser les formes intégrées :shape=actorpour les personnes,shape=cylinder3pour les bases de données - PAS de flèches traversant des conteneurs non liés - réorganiser la disposition pour que chaque flèche ait un chemin clair entre la source et la cible
- PAS d'étiquettes sans
labelBackgroundColor=#ffffff- les étiquettes nues deviennent illisibles lorsqu'elles traversent d'autres éléments - PAS de suppression d'étiquettes pour résoudre un chevauchement - si une étiquette chevauche un conteneur, corriger la disposition ou le décalage, ne jamais supprimer d'information