Archyno
C4Fondamentaux

Qu'est-ce que le modèle C4 ?

Quatre niveaux de zoom sur un système, chacun répondant à une question soulevée par le précédent - et volontairement aucune notation propre, ce qui lui permet de circuler entre les équipes.

7 min de lectureC4 model1 sur 3

La réponse courte

  • C4, ce sont quatre niveaux de zoom sur un système - contexte, conteneurs, composants, code - et chaque niveau existe pour répondre à une question soulevée par celui du dessus.
  • C'est une convention, pas une notation. C4 dit ce qui a sa place sur un diagramme et vous laisse les formes, d'où la possibilité de le dessiner en UML, en ArchiMate ou en boîtes et flèches.
  • Un conteneur est une chose déployable ou exécutable - une application, un service, une base de données - pas un conteneur Docker. C'est le niveau dont les équipes tirent le plus, et le plus souvent sauté.
  • Le niveau 4 vaut rarement la peine d'être dessiné à la main. Si vous voulez les classes, générez-les depuis le code, où elles sont déjà vraies.

01Quatre questions, dans l'ordre#

Le modèle C4 est un jeu de quatre diagrammes sur un même système, chacun plus rapproché que le précédent. Son apport réel n'est pas le dessin, c'est l'ordre. Chaque niveau répond à une question, et cette réponse soulève la question pour laquelle existe le niveau suivant.

Les quatre niveaux du modèle C4 comme des portées imbriquées. Niveau 1, contexte système, contient le système logiciel et les personnes et systèmes qui l'entourent. Niveau 2, conteneurs, ouvre ce système en une application web, une API et une base de données. Niveau 3, composants, ouvre un conteneur en ses parties internes. Niveau 4, code, ce sont les classes à l'intérieur d'un composant.
Chaque niveau répond à une question et en soulève une autre. Le public se rétrécit à mesure qu'on zoome, et c'est pourquoi les deux premiers sont ceux dont la plupart des gens auront jamais besoin.
ÉlémentNotationCe que cela signifie
1. Contexte systèmeUne boîte, plus ses acteurs et ses voisinsUne boîte pour votre système, entourée des personnes et des autres systèmes avec lesquels il dialogue. Aucun détail interne. Le diagramme qu'un nouvel arrivant et un décideur peuvent lire tous les deux.
2. ConteneursDes boîtes dans la frontière du systèmeCette boîte unique, ouverte. Les choses déployables ou exécutables séparément - application web, API, base de données, courtier de messages - et les appels entre elles.
3. ComposantsDes boîtes dans un conteneurUn conteneur, ouvert. Ses grandes parties structurelles et leurs dépendances. Vaut la peine d'être dessiné quand un conteneur est assez gros pour qu'on en discute.
4. CodeDes classesLes classes d'un composant, c'est-à-dire un diagramme de classes UML. Générez-le ou sautez-le ; dessiner ce niveau à la main est le moyen le plus rapide de périmer un diagramme.

Le public se rétrécit à mesure que vous descendez. Le niveau 1 s'adresse à quiconque s'intéresse au système, y compris à des gens qui ne liront jamais de code. Le niveau 4 s'adresse à l'équipe, la semaine où elle restructure quelque chose. Ce gradient est l'argument pour dessiner les deux premiers et s'arrêter jusqu'à ce que quelqu'un en demande plus.

02C4 est une convention, pas une notation#

C'est la partie qui se perd. C4 ne définit ni formes, ni styles de trait, ni sémantique de relation. Il vous dit ce qui a sa place sur chaque diagramme et à qui il s'adresse, puis : dessinez-le comme votre équipe dessine déjà.

La conséquence pratique est que C4 se compose avec la notation que vous avez au lieu de la remplacer. Un diagramme de conteneurs dessiné avec des composants UML est à la fois un diagramme UML légal et un diagramme C4 correct. Dessiné en ArchiMate, le même contenu se projette sur des composants applicatifs et des noeuds technologiques. Les deux conviennent. Ce qui ne convient pas, c'est un diagramme dont les boîtes signifient trois choses différentes parce que personne n'a dit de quel niveau il s'agissait.

Comme il n'y a pas de notation à vérifier, la discipline doit venir d'ailleurs : étiquetez chaque boîte par ce qu'elle est, chaque trait par ce qu'il fait et sur quel protocole, et ne mélangez jamais deux niveaux sur une même toile. Ces trois règles font l'essentiel du travail qu'une spécification ferait autrement à votre place.

03C'est le mot conteneur qui pose problème#

C4 est antérieur à la domination de Docker et emploie conteneur dans son sens ancien et général : une chose qui doit tourner pour que le système fonctionne, et qui peut être déployée seule. Une application monopage est un conteneur. Une base de données aussi, comme une fonction serverless, un courtier de messages et une application mobile.

Le niveau 2 est celui qui apporte le plus, et c'est celui que les équipes sautent - en partie à cause du nom, en partie parce que c'est le premier diagramme qui force une vraie décision sur ce qu'est réellement le système. L'article sur le diagramme de conteneurs en déroule un de bout en bout.

04L'utiliser sans qu'il se périme#

Un jeu de diagrammes C4 a le même mode de défaillance que toute autre documentation d'architecture : exact le jour où il est dessiné, discrètement faux six mois plus tard. Deux choses aident, et aucune ne concerne le dessin.

La première est de garder les niveaux dans un seul modèle plutôt que dans quatre images sans lien. Si l'API de votre diagramme de contexte et celle de votre diagramme de conteneurs sont le même élément, la renommer est une seule modification ; si ce sont deux boîtes qui partagent par hasard une étiquette, ce sont deux modifications et l'une sera oubliée. C'est l'argument en faveur d'un modèle derrière les vues, et c'est le même argument que développe longuement maintenir un modèle à jour.

La seconde est de dessiner moins de niveaux. Un diagramme de contexte et un diagramme de conteneurs qui sont vrais valent mieux que quatre niveaux dont deux sont de la fiction. Le niveau 4 en particulier devrait être généré depuis le code ou omis : un diagramme de classes dessiné à la main est l'instantané d'une opinion, et le compilateur en a une plus récente.

En une ligne chacun

  1. 01Quatre niveaux, quatre questions : qui l'utilise, quelles sont les pièces, qu'y a-t-il dans une pièce, quelles sont les classes.
  2. 02C4 définit le contenu, pas la notation - dessinez-le donc en UML, en ArchiMate ou en simples boîtes, et restez cohérent.
  3. 03Un conteneur est tout ce qui se déploie ou s'exécute séparément. Cela n'a rien à voir avec Docker.
  4. 04Dessinez les niveaux 1 et 2, ajoutez le 3 là où il y a un débat à trancher, et générez ou omettez le 4.

05Questions fréquentes#

Que signifie C4 ?

Context, Containers, Components et Code - les quatre niveaux de détail, du système entier dans son environnement jusqu'aux classes à l'intérieur d'un composant. Le nom est la table des matières.

C4 remplace-t-il UML ?

Non, et ce n'en est pas non plus une alternative. C4 indique quels quatre diagrammes tracer et ce qui appartient à chacun ; UML fournit une notation à la sémantique définie. Ils se composent : un diagramme de conteneurs C4 tracé en notation de composants UML est un diagramme UML légal et un diagramme C4 correct.

Qu'est-ce qu'un conteneur en C4 ?

Quelque chose qui doit tourner pour que le système fonctionne et qui peut être déployé séparément - une application web, une application mobile, une API, une base de données, un broker de messages. Ce n'est pas un conteneur Docker, et cette collision de noms est la première source de confusion sur le modèle.

Faut-il tracer les quatre niveaux ?

Non. La plupart des équipes tracent les niveaux 1 et 2 et s'arrêtent. Le niveau 3 vaut le coup pour un conteneur assez complexe pour que ses entrailles fassent débat, et le niveau 4 presque jamais - le code est déjà la description du code.

Dans cette série
  1. 01Qu'est-ce que C4 ?
  2. 02Diagramme de conteneurs
  3. 03C4 vs UML

À lire aussi

Tous les articles