L’architecture logicielle est souvent perçue comme quelque chose de complexe, difficile à visualiser, encore plus à expliquer, surtout à des équipes multidisciplinaires (dév, ops, PO, architectes, chefs de projets etc…).
C’est ici que la modélisation C4 intervient et présente son intérêt. Cette modélisation offre une manière structurée, simple et intuitive de représenter les systèmes logiciels, rendant l’architecture accessible à tous, des développeurs aux décideurs. Dans cet article, je vais vous présenter le modèle C4, ses 4 niveaux, et comment l’utiliser efficacement dans vos projets.
Pourquoi le modèle C4 ?
Le modèle C4 a été conçu par Simon Brown pour résoudre un problème commun :
Arriver à communiquer efficacement l’architecture d’un système sans perdre en clarté ou noyer l’audience dans des détails inutiles.
Contrairement aux diagrammes UML traditionnels, souvent trop complexes, le modèle C4 (C4 Model en anglais) propose une approche plus pragmatique et compréhensible, en découpant l’architecture en différentes couches.
Les 4 niveaux du modèle C4
Le modèle C4 tire son nom des quatre types de diagrammes qui le composent, chacun offrant une vue différente sur le système :
1. Diagramme de Contexte : la vue d’ensemble
Le diagramme de contexte (system context diagram) donne une vue macroscopique du système. Il montre les interactions entre le système que vous développez et ses utilisateurs, ainsi que les autres systèmes externes avec lesquels il communique.
Exemple : Prenons l’application Web d’une banque. Le diagramme de contexte illustrerait les interactions entre cette application et l’extérieur (les clients qui interagissent avec, le système bancaire interne, la solution externe d’envoi de mails …).

2. Diagramme de Conteneur : l’architecture technique
Une fois que vous avez la vue d’ensemble de votre système grâce au diagramme de contexte, le diagramme de conteneur (Container diagram) descend d’un niveau pour montrer les différentes “boîtes” (ou conteneurs) internes de votre système et les interactions entre ces dernières. Ces conteneurs peuvent être des applications (Web, mobile), des services (APIs REST par exemple), ou encore des bases de données. Ils représentent votre architecture logicielle à haut niveau, comment les responsabilités sont distribuées et les différentes technologies utilisées.
Exemple : dans notre exemple d’application de banque, nous voyons ici, non seulement les interactions externes (toujours présentes) mais un niveau de détail plus fin sur l’architecture de l’application. Les informations sont stockées dans une base de donnée Oracle, on y accède par le biais d’appels API (JSON/HTTPS) via deux applications. La première est une Single Page Application (SPA) Angular, la seconde est une application mobile Xamarin

3. Diagramme de Composants : une vue encore plus détaillée
Grâce au diagramme de composants (Component diagram), chaque conteneur est décortiqué en composants internes. Cela permet d’avoir une idée claire des différentes parties internes du système, comme les controlleurs ou services, et de comprendre comment ils s’articulent, de voir les interactions entre eux.
Exemple : Nous voyons ici que les deux applications se basent sur un backend Spring (Java), avec des controlleurs et services permettant l’authentification, la gestion des mots de passe et la gestion des comptes.

4. Diagramme de classes : le niveau le plus fin
Ce diagramme, qui est optionnel dans le modèle C4, montre la structure interne du code pour chaque composant. À ce niveau, on entre dans les détails des classes ou modules d’ composant du système. Ce diagramme est souvent utile pour la documentation des systèmes les plus complexes. Il s’agit d’un diagramme UML qu’il est possible de générer via un IDE

Pourquoi utiliser C4 dans vos projets ?
Le modèle C4 est particulièrement intéressant parce qu’il adapte la complexité de l’architecture à l’audience à laquelle vous vous adressez. Chaque diagramme est destiné à répondre à des besoins spécifiques :
- Le diagramme de contexte est parfait pour présenter le système aux parties prenantes non techniques.
- Le diagramme de conteneur est utile pour les équipes techniques qui doivent comprendre comment les différents morceaux du système interagissent.
- Les diagrammes de composants et de classes permettent aux développeurs / architectes logiciels de zoomer dans les détails lorsqu’ils en ont besoin.
Ce modèle m’a permis de clarifier l’architecture des projets dans lesquels j’interviens, pour les équipes de développement et autres équipes techniques (architectes du SI, équipes sécurité…) mais également pour les différentes parties prenantes non techniques intervenant sur ces projets. L’approche C4 permet de passer d’une vue large et compréhensible à une vision technique plus approfondie, selon le besoin.
Quels outils pour créer des diagrammes C4 ?
Il existe plusieurs outils qui permettent de créer facilement des diagrammes C4, et certains outils permettent même de générer des diagrammes au format architecture as code. Cela signifie que vous pouvez versionner et maintenir vos diagrammes à jour, directement à partir du code. Voici quelques solutions intéressantes :
Diagrammes d’architecture as code
Cette approche consiste à traiter l’architecture comme un élément vivant du système, qui peut être maintenu et mis à jour de la même manière que le code lui-même.
Au lieu de créer des diagrammes statiques dans des outils visuels, vous décrivez l’architecture sous forme de code ou de fichiers de configuration, puis générez les diagrammes automatiquement. Voici quelques outils qui prennent en charge cette approche :
- Structurizr : Structurizr propose une API Java qui permet de générer des diagrammes C4 à partir de code. Cela vous permet de maintenir vos diagrammes à jour avec l’évolution de votre base de code. Vous pouvez également utiliser des fichiers au format JSON ou YAML pour définir les éléments de votre architecture.
- C4-PlantUML : Une extension de PlantUML dédiée au modèle C4, qui permet d’écrire des diagrammes d’architecture directement dans un fichier texte tout en suivant la notation C4. Cette solution est souvent utilisée pour intégrer des diagrammes dans des fichiers markdown ou des wikis de projets.
Outils classiques
Si vous préférez créer des diagrammes visuels de manière plus traditionnelle, ces outils offrent des interfaces intuitives :
- Draw.io : Un outil visuel simple et efficace, proposant des modèles C4 préconfigurés. Il est facile d’utilisation et s’intègre bien avec les plateformes collaboratives comme Confluence ou Google Drive.
- Lucidchart : Similaire à Draw.io, cet outil propose des fonctionnalités de collaboration et une bibliothèque d’éléments pour créer des diagrammes C4.
Exemple de diagramme de conteneur avec structurizr (digaramme généré grâce au code JSON ci-dessous)

workspace "Name" "Description" {
!identifiers hierarchical
model {
u = person "User"
ss = softwareSystem "Software System" {
wa = container "Web Application"
db = container "Database Schema" {
tags "Database"
}
}
u -> ss.wa "Uses"
ss.wa -> ss.db "Reads from and writes to"
}
views {
systemContext ss "Diagram1" {
include *
autolayout lr
}
container ss "Diagram2" {
include *
autolayout lr
}
styles {
element "Element" {
color #ffffff
}
element "Person" {
background #d34407
shape person
}
element "Software System" {
background #cccccc
}
element "Container" {
background #DDDDDD
}
element "Database" {
shape cylinder
}
}
}
configuration {
scope softwaresystem
}
}
Bonnes pratiques pour créer des diagrammes C4 efficaces
Quelques conseils pour rendre vos diagrammes clairs et compréhensibles :
- Moins, c’est plus : Ne surchargez pas vos diagrammes. L’objectif est de faciliter la compréhension, pas d’accumuler les détails.
- Adaptez le niveau de détail : Assurez vous de ne montrer que ce qui est nécessaire pour l’audience cible. Un diagramme de code n’est pas nécessaire pour une présentation à la direction, par exemple.
- Des noms explicites : Utilisez des noms de conteneurs et de composants qui parlent d’eux-mêmes, sans jargon inutile.
Conclusion : une approche pragmatique et accessible
Le modèle C4 facilite la représentation et la communication de l’architecture logicielle de manière claire et structurée. Il offre une vue d’ensemble complète du système, tout en permettant de zoomer sur les détails techniques lorsqu’ils sont nécessaires. Que vous soyez architecte, développeur ou chef de projet, le modèle C4 vous aide à appréhender et simplifier la complexité d’un logiciel, de façon pragmatique et adaptée à chaque audience.
Si vous n’avez pas encore utilisé le modèle C4 pour vos projets, je vous invite à l’essayer pour mieux visualiser et expliquer vos architectures !
Pour aller plus loin, voici une vidéo de présentation du modèle C4