Was ist das C4-Modell?
Vier Zoomstufen über ein System, jede beantwortet eine Frage, die die Stufe darüber aufgeworfen hat - und bewusst keine eigene Notation, weshalb es zwischen Teams übertragbar ist.
7 Min. LesezeitC4 model1 von 3
Die kurze Antwort
- C4 sind vier Zoomstufen über ein System - Kontext, Container, Komponenten, Code - und jede Ebene existiert, um eine Frage zu beantworten, die die Ebene darüber aufgeworfen hat.
- Es ist eine Konvention, keine Notation. C4 sagt, was auf ein Diagramm gehört, und überlässt Ihnen die Formen - deshalb lässt es sich in UML, in ArchiMate oder in Kästen und Pfeilen zeichnen.
- Ein Container ist etwas Deploybares oder Lauffähiges - eine Anwendung, ein Dienst, eine Datenbank - kein Docker-Container. Es ist die Ebene mit dem größten Nutzen und zugleich die am häufigsten übersprungene.
- Ebene 4 lohnt sich von Hand meist nicht. Wenn Sie die Klassen wollen, erzeugen Sie sie aus dem Code, wo sie ohnehin stimmen.
01Vier Fragen, der Reihe nach#
Das C4-Modell ist ein Satz von vier Diagrammen über ein System, jedes eine nähere Ansicht als das vorige. Sein eigentlicher Beitrag ist nicht das Zeichnen, sondern die Reihenfolge. Jede Ebene beantwortet eine Frage, und diese Antwort wirft die Frage auf, für die es die nächste Ebene gibt.
| Element | Notation | Was es bedeutet |
|---|---|---|
| 1. Systemkontext | Ein Kasten, dazu Menschen und Nachbarn | Ein Kasten für Ihr System, umgeben von den Menschen und den anderen Systemen, mit denen es spricht. Gar keine Interna. Das Diagramm, das ein Neuzugang und eine Führungskraft beide lesen können. |
| 2. Container | Kästen innerhalb der Systemgrenze | Dieser eine Kasten, geöffnet. Die separat deploybaren oder lauffähigen Dinge - Webanwendung, API, Datenbank, Broker - und die Aufrufe zwischen ihnen. |
| 3. Komponenten | Kästen innerhalb eines Containers | Ein Container, geöffnet. Die wesentlichen strukturellen Teile darin und ihre Abhängigkeiten. Lohnt sich, wenn ein Container groß genug ist, dass man über ihn streitet. |
| 4. Code | Klassen | Die Klassen innerhalb einer Komponente, also ein UML-Klassendiagramm. Erzeugen oder weglassen; diese Ebene von Hand zu zeichnen ist der schnellste Weg zu einem veralteten Diagramm. |
Das Publikum wird enger, je tiefer Sie gehen. Ebene 1 ist für alle, die ein Interesse am System haben, auch für Menschen, die nie Code lesen werden. Ebene 4 ist für das Team, in einer Woche, in der es etwas umbaut. Dieses Gefälle ist das Argument dafür, die ersten beiden zu zeichnen und aufzuhören, bis jemand nach mehr fragt.
02C4 ist eine Konvention, keine Notation#
Das ist der Teil, der verloren geht. C4 definiert keine Formen, Linienstile oder Beziehungssemantik. Es sagt Ihnen, was auf welches Diagramm gehört und für wen es ist, und dann: zeichnen Sie es so, wie Ihr Team ohnehin zeichnet.
Die praktische Folge ist, dass C4 sich mit der Notation kombiniert, die Sie haben, statt sie zu ersetzen. Ein Containerdiagramm, mit UML-Komponenten gezeichnet, ist zugleich ein legales UML-Diagramm und ein korrektes C4-Diagramm. In ArchiMate gezeichnet, bildet sich derselbe Inhalt auf Anwendungskomponenten und Technologieknoten ab. Beides ist in Ordnung. Nicht in Ordnung ist ein Diagramm, dessen Kästen drei verschiedene Dinge bedeuten, weil niemand gesagt hat, welche Ebene es war.
Weil es keine Notation zu prüfen gibt, muss die Disziplin von woanders kommen: beschriften Sie jeden Kasten damit, was er ist, jede Linie damit, was sie tut und über welches Protokoll, und mischen Sie nie zwei Ebenen auf einer Fläche. Diese drei Regeln erledigen das meiste von dem, was sonst eine Spezifikation für Sie täte.
03Das Wort Container ist das Problem#
C4 ist älter als Dockers Vorherrschaft und benutzt Container im älteren, allgemeinen Sinn: etwas, das laufen muss, damit das System funktioniert, und das für sich deployt werden kann. Eine Single-Page-Anwendung ist ein Container. Ebenso eine Datenbank, eine Serverless-Funktion, ein Message Broker und eine mobile App.
Auf Ebene 2 liegt der meiste Wert, und es ist die Ebene, die Teams überspringen - zum Teil wegen des Namens und zum Teil, weil es das erste Diagramm ist, das eine echte Entscheidung darüber erzwingt, was das System eigentlich ist. Der Artikel zum Containerdiagramm arbeitet eines von Anfang bis Ende durch.
04So einsetzen, dass es nicht veraltet#
Ein Satz C4-Diagramme hat dasselbe Versagensmuster wie jede andere Architekturdokumentation: am Tag des Zeichnens korrekt und ein halbes Jahr später still falsch. Zwei Dinge helfen, und keines davon handelt vom Zeichnen.
Das erste ist, die Ebenen in einem Modell zu halten statt in vier unverbundenen Bildern. Wenn die API auf Ihrem Kontextdiagramm und die API auf Ihrem Containerdiagramm dasselbe Element sind, ist Umbenennen eine Änderung; sind es zwei Kästen, die zufällig eine Beschriftung teilen, sind es zwei Änderungen und eine wird vergessen. Das ist das Argument für ein Modell hinter den Sichten, und es ist dasselbe Argument, das ein Modell aktuell zu halten ausführlich macht.
Das zweite ist, weniger Ebenen zu zeichnen. Ein Kontext- und ein Containerdiagramm, die stimmen, schlagen vier Ebenen, von denen zwei Fiktion sind. Besonders Ebene 4 sollte aus dem Code erzeugt oder weggelassen werden - ein handgezeichnetes Klassendiagramm ist die Momentaufnahme einer Meinung, und der Compiler hat eine aktuellere.
In je einer Zeile
- 01Vier Ebenen, vier Fragen: wer benutzt es, was sind die Teile, was steckt in einem Teil, was sind die Klassen.
- 02C4 definiert Inhalt, nicht Notation - zeichnen Sie es also in UML, in ArchiMate oder in schlichten Kästen, und bleiben Sie konsistent.
- 03Ein Container ist alles separat Deploybare oder Lauffähige. Mit Docker hat das nichts zu tun.
- 04Zeichnen Sie Ebene 1 und 2, ergänzen Sie 3, wo ein Streit zu klären ist, und erzeugen oder lassen Sie 4 weg.
05Häufige Fragen#
Wofür steht C4?
Context, Containers, Components und Code - die vier Detailstufen, vom ganzen System in seiner Umgebung bis zu den Klassen innerhalb einer Komponente. Der Name ist das Inhaltsverzeichnis.
Ist C4 ein Ersatz für UML?
Nein, und auch keine Alternative dazu. C4 sagt Ihnen, welche vier Diagramme zu zeichnen sind und was auf welches gehört; UML gibt Ihnen eine Notation mit definierter Semantik. Sie ergänzen sich: ein C4-Containerdiagramm in UML-Komponentennotation ist ein legales UML-Diagramm und ein korrektes C4-Diagramm.
Was ist ein Container in C4?
Etwas, das laufen muss, damit das System funktioniert, und das separat deploybar ist - eine Webanwendung, eine mobile App, eine API, eine Datenbank, ein Message Broker. Es ist kein Docker-Container, und diese Namenskollision ist die häufigste Verwirrungsquelle rund um das Modell.
Muss ich alle vier Ebenen zeichnen?
Nein. Die meisten Teams zeichnen Ebene 1 und 2 und hören auf. Ebene 3 lohnt sich bei einem Container, der komplex genug ist, dass über sein Inneres gestritten wird, und Ebene 4 fast nie - der Code ist bereits die Beschreibung des Codes.
In dieser Reihe
- 01Was ist C4?
- 02Containerdiagramm
- 03C4 vs. UML
Passend dazu
Strukturdiagramme
Modellierungspraxis
Strukturdiagramme
Grundlagen
Modellierungspraxis