Was macht C4 Container-Diagramm-Generator?
Erzeugt C4-Container-Diagramme nach den Konventionen des C4-Modells und exportiert sie als bearbeitbare .drawio-XML-Dateien, die direkt in draw.io (Desktop oder Web) geöffnet werden können.
Verwendungszweck
Explizite Auslöser:
- Der Benutzer fragt nach einem C4-Diagramm, Container-Diagramm oder Architekturdiagramm
- Der Benutzer sagt „zeichne die Architektur“, „Systemdiagramm“, „zeige mir die Komponenten“
- Der Benutzer muss die Systemarchitektur für die Dokumentation oder eine Präsentation visualisieren
- Der Benutzer erwähnt draw.io, drawio oder möchte ein bearbeitbares Diagramm
Proaktive Auslöser:
- Erläuterung eines Systems mit 3+ interagierenden Komponenten
- Diskussion über Microservices, APIs, Datenbanken und deren Beziehungen
- Überprüfung oder Entwurf der Systemarchitektur
Nicht verwenden, wenn:
- Der Benutzer ein einfaches Flussdiagramm möchte (stattdessen Mermaid verwenden)
- Der Benutzer UI-Wireframes oder Mockups benötigt
- Das System weniger als 3 Komponenten hat
Ablauf
Schritt 1: Anforderungen erfassen
Ermitteln Sie aus dem Gespräch oder fragen Sie den Benutzer:
- Welches System diagrammieren wir?
- Wer sind die Benutzer/Akteure (Personen)?
- Welche Container existieren (Apps, Dienste, Datenbanken, Warteschlangen, Dateispeicher)?
- Mit welchen externen Systemen interagiert es?
- Was sind die wichtigsten Datenflüsse und Protokolle?
Wenn der Benutzer eine Spezifikation, Codebasis-Beschreibung oder Architekturübersicht bereitstellt, extrahieren Sie die Elemente automatisch und bestätigen Sie diese vor der Generierung.
Schritt 2: Elemente klassifizieren
Ordnen Sie jedes Element einer C4-Kategorie zu:
| Kategorie | Farbe | Form | Beschreibung |
|---|---|---|---|
| Person | #08427B (dunkelblau) | shape=actor + Textlabel | Benutzer, Akteure, Rollen |
| Container | #438DD5 (blau) | Abgerundetes Rechteck | Anwendungen, Dienste, APIs |
| Datenbank | #438DD5 (blau) | Zylinder | Jeder Datenspeicher (SQL, NoSQL, Dateien) |
| Warteschlange/Broker | #438DD5 (blau) | Abgerundetes Rechteck mit Label | Nachrichtenwarteschlangen, Ereignisbusse |
| Externes System | #999999 (grau) | Abgerundetes Rechteck | Drittanbieterdienste, APIs |
| Systemgrenze | keine (transparent) | Gestricheltes Rechteck | Fasst interne Container zusammen |
Referenz: references/element-templates.md für exakte draw.io-XML-Vorlagen.
Schritt 3: Layout planen
Wenden Sie strenges geschichtetes Layout (von oben nach unten) an:
Schicht 1 (y ~= 20): Personen-Elemente (Akteure)
Schicht 2 (y ~= 250): Systemgrenze, die interne Container enthält
Schicht 3 (y ~= 700+): Externe Systeme
Layout-Regeln:
- Jedes Element erhält explizite x-, y-Koordinaten (kein automatisches Layout)
- Mindestens 200px horizontaler Abstand zwischen Elementen in derselben Schicht
- Mindestens 200px vertikaler Abstand zwischen Schichten
- Systemgrenze = gestricheltes Rechteck, das alle internen Container mit 40px Polsterung umschließt
- Ordnen Sie die Elemente von links nach rechts entsprechend der primären Datenflussrichtung an
- Gruppieren Sie verwandte Container innerhalb von Untergrenzen, wenn das System ausgeprägte Subsysteme hat
- Halten Sie die Diagrammbreite unter 1600px, um die Lesbarkeit zu gewährleisten
- Zentrieren Sie die Elemente horizontal innerhalb ihrer Schicht
Minimierung von Linienkreuzungen:
- Platzieren Sie Elemente, die häufig kommunizieren, nebeneinander
- Führen Sie Verbindungen möglichst vertikal
- Vermeiden Sie diagonale Linien, die andere Elemente kreuzen
- Keine Pfeile durch nicht verwandte Container: Wenn A mit C verbunden ist, darf der Pfeil NICHT durch B verlaufen. Beheben Sie dies, indem Sie (a) A und C nebeneinander platzieren, (b) explizite Aus-/Eintrittspunkte verwenden oder (c) das Layout umorganisieren
- Pfeilbeschriftungen dürfen Container-Text nicht überlappen: verwenden Sie
labelBackgroundColor=#ffffffauf allen Kanten und verwenden Sie einen senkrechten Versatz (yin mxGeometry), um die Beschriftungen von den Containern wegzudrücken
Schritt 4: Verbindungen definieren
Geben Sie für jede Verbindung an:
- Quell- und Ziel-Element
- Beschriftung: Aktion + Protokoll (z. B. „Liest/Schreibt [SQL/TCP]“, „Sendet Ereignisse [AMQP]“)
- Stil: durchgezogene Linie = synchroner Aufruf, gestrichelte Linie = asynchron (Ereignisse, Warteschlangen, Webhooks)
- Richtung: immer Quelle -> Ziel (folgt dem Datenfluss)
Verbindungsregeln:
- Jeder Pfeil muss eine Beschriftung haben (keine unbeschrifteten Verbindungen) – falls eine Beschriftung überlappt, beheben Sie das Layout oder den Versatz, entfernen Sie niemals die Beschriftung
- Fügen Sie immer
labelBackgroundColor=#ffffffin die Verbindungsstile ein - Verwenden Sie das Suffix
[Protokoll]:[REST/JSON],[gRPC],[SQL],[AMQP],[WebSocket] - Bidirektionale Flüsse: verwenden Sie zwei separate Pfeile mit unterschiedlichen Beschriftungen
- Selbstbezüge: vermeiden (strukturieren Sie das Diagramm stattdessen um)
Schritt 5: .drawio-XML erzeugen
Verwenden Sie die XML-Struktur aus references/drawio-template.md als Grundlage.
Erstellen Sie das XML nach diesen Regeln:
- Beginnen Sie mit dem
<mxfile>-Wrapper und<mxGraphModel>mit passenden Abmessungen - Fügen Sie die Stammzellen (id="0" und id="1") hinzu
- Fügen Sie zuerst die Systemgrenzen-Rechtecke hinzu (sie sind Eltern für die enthaltenen Elemente)
- Fügen Sie alle Elemente mit expliziter Geometrie (x, y, Breite, Höhe) hinzu
- Fügen Sie alle Verbindungen mit Quell-/Zielreferenzen hinzu
- Fügen Sie die Legende in der unteren rechten Ecke hinzu
Elementgrößen:
- Person: 40 x 60px Akteur + 220 x 60px Textlabel darunter
- Container: 240 x 120px
- Datenbank (Zylinder): 240 x 120px
- Externes System: 240 x 120px
- Systemgrenze: berechnet, um die Kinder + 40px Polsterung auf jeder Seite zu umschließen
Schritt 6: Legende hinzufügen
Jedes Diagramm muss eine Legende enthalten. Platzieren Sie diese in der unteren rechten Ecke.
Die Legende muss zeigen:
- Person = dunkelblauer Strichmännchen (#08427B)
- Container = blaues abgerundetes Rechteck (#438DD5)
- Datenbank = blauer Zylinder (#438DD5)
- Externes System = graues abgerundetes Rechteck (#999999)
- Durchgezogener Pfeil = synchroner Fluss
- Gestrichelter Pfeil = asynchroner Fluss
Referenz: references/legend-template.md für die exakte XML.
Schritt 7: Speichern und validieren
Speichern Sie unter dem vom Benutzer angeforderten Pfad oder standardmäßig unter ./c4_[systemname].drawio.
Validierungs-Checkliste:
- Alle Elemente haben explizite x-, y-Koordinaten
- Schichten sind von oben nach unten: Person -> Systemgrenze -> Extern
- Systemgrenze umschließt alle internen Container
- Legende ist in der unteren rechten Ecke vorhanden
- Keine überlappenden Elemente (Koordinaten + Abmessungen prüfen)
- Minimale Linienkreuzungen
- Jede Verbindung hat eine Beschriftung mit Protokoll
- Durchgezogene Linien = synchron, gestrichelte Linien = asynchron
- Schriftfarben sind weiß (#ffffff) auf farbigen Hintergründen
- Datei öffnet sich korrekt in draw.io (gültige XML-Struktur)
C4-Modellregeln
Beachten Sie die Einschränkungen des C4-Container-Diagramms:
- Container-Diagramm zeigt die technologischen Entscheidungen auf hoher Ebene und wie die Container kommunizieren
- Jeder Container ist eine separat bereitstellbare/ausführbare Einheit (keine Klasse oder kein Modul)
- Mischen Sie keine C4-Ebenen: Dieses Skill erzeugt nur die Container-Ebene
- Für Details auf Komponentenebene innerhalb eines Containers erstellen Sie ein separates Diagramm
- Personen-Elemente repräsentieren Rollen, keine Individuen
- Externe Systeme sind alles außerhalb der Systemgrenze, das das Team nicht besitzt
Anti-Patterns
- KEIN automatisches Layout – verwenden Sie immer explizite x-, y-Koordinaten für vorhersagbare Ergebnisse
- KEINE unbeschrifteten Pfeile – jede Verbindung benötigt eine Aktion und ein Protokoll
- KEINE fehlende Legende – Legende ist für jedes Diagramm obligatorisch
- KEIN beengtes Layout – Mindestabstände zwischen Elementen einhalten
- KEINE gemischten C4-Ebenen – nur Container-Ebene (keine Klassen, keine Infrastruktur)
- KEIN unsichtbarer Text – sicherstellen, dass die Schriftfarbe mit dem Hintergrund kontrastiert
- KEINE festcodierten Abmessungen – Größe der Systemgrenze aus den Kindern berechnen
- KEINE
mxgraph.c4.*-Formen – sie erfordern die C4-Shape-Bibliothek, die standardmäßig NICHT in draw.io geladen ist. Verwenden Sie integrierte Formen:shape=actorfür Personen,shape=cylinder3für Datenbanken - KEINE Pfeile, die nicht verwandte Container kreuzen – Layout so umordnen, dass jeder Pfeil einen klaren Pfad zwischen Quelle und Ziel hat
- KEINE Beschriftungen ohne
labelBackgroundColor=#ffffff– nackte Beschriftungen werden unlesbar, wenn sie andere Elemente kreuzen - KEIN Entfernen von Beschriftungen zur Behebung von Überlappungen – falls eine Beschriftung einen Container überlappt, beheben Sie das Layout oder den Versatz, entfernen Sie niemals Informationen