C4 Chart

Définition

Les C4 Charts (ou plus exactement diagrammes C4) sont une méthode de documentation d'architecture logicielle créée par Simon Brown. Le but est de décrire un système en utilisant plusieurs niveaux de zoom, un peu comme Google Maps : on commence par la vue globale puis on entre progressivement dans les détails.

Niveau 1 : Context (System Context)

Question :

Quel est le système et avec quoi interagit-il ?

Public :

Exemple :

                 +----------------+
                 |    Shopify     |
                 +----------------+
                        |
                        v
+---------+     +----------------+     +-----------+
| Client  | --> | Order Platform | --> | OneStock  |
+---------+     +----------------+     +-----------+
                        |
                        v
                  +-----------+
                  | Databricks|
                  +-----------+

On montre :

Pas de détail technique.

Niveau 2 : Container Diagram

Question :

Quels sont les grands blocs techniques qui composent le système ?

⚠️ Dans C4, un container n'est pas forcément un Docker !

Un container est une application ou une base de données déployable :

Exemple :

+-------------------------+
| Order Platform          |
+-------------------------+

+-------------+
| React Front |
+-------------+

+-------------+
| API .NET    |
+-------------+

+-------------+
| Databricks  |
+-------------+

+-------------+
| SQL DB      |
+-------------+

Niveau 3 : Component Diagram

Question :

Comment est construite une application ?

On entre à l'intérieur d'un container.

Exemple :

API Orders

+----------------------+
| Order Controller     |
+----------------------+

+----------------------+
| Order Service        |
+----------------------+

+----------------------+
| Inventory Service    |
+----------------------+

+----------------------+
| Repository Layer     |
+----------------------+

Niveau 4 : Code Diagram

Question :

Comment est implémenté le composant ?

C'est le niveau le plus détaillé :

OrderService
 ├─ CreateOrder()
 ├─ ValidateStock()
 └─ PublishEvent()

InventoryRepository
 ├─ GetAvailability()
 └─ UpdateInventory()

Ce niveau est rarement utilisé aujourd'hui car :

Le site officiel indique d'ailleurs que les équipes utilisent généralement surtout les diagrammes Context et Container, parfois Component, mais rarement Code

Diagrammes complémentaires

Le modèle C4 ajoute également :

System Landscape

Vue de l'écosystème global :

Shopify
OneStock
Salesforce
Databricks
Cegid Y2
PIM
WMS

Très utile pour une cartographie SI.

Dynamic Diagram

Montre un scénario :

Client
  |
  v
Shopify
  |
  v
Logic Apps
  |
  v
OneStock
  |
  v
Databricks

En précisant l'ordre des appels.

Deployment Diagram

Montre où sont déployés les composants :

Azure Subscription

 ├─ App Service
 ├─ Logic Apps
 ├─ Databricks
 ├─ Azure SQL
 └─ Key Vault

Conclusion

Besoin Diagramme C4
Cartographie SI globale System Landscape
Vision projet Context
Architecture applicative Container
Documentation intégration Component
Déploiement Azure Deployment
Flux métier détaillé Dynamic

Exemple de structure documentaire idéale

Pour chaque projet :

01-Context.md
02-Container.md
03-Components.md
04-Dynamic-Flows.md
05-Deployment.md

Avec des diagrammes générés via :

Pour l'approche Docs-as-Code / Markdown, on préfère Structurizr DSL ou C4-PlantUML, qui s'intègrent très bien dans Azure DevOps, Git et Confluence.