Das C4-Modell: Visualisierung von Softwarearchitekturen wie „Google Maps für Code“

„Das C4-Modell hilft Teams, Softwarearchitekturen klar, konsistent und auf der richtigen Detailtiefe zu kommunizieren.“
— Simon Brown

Das C4-Modell (Context, Container, Komponenten, Code) ist ein hierarchisches, vergrößerbares Framework zur Dokumentation von Softwarearchitekturen. Es ist darauf ausgelegt, entwicklerfreundlichAgile-konform, und lesbar — wobei es über überladene, statische „Kästchen und Linien“-Diagramme hinausgeht.

Es ermöglicht Teams, folgendes zu tun:

  • Die Architektur effektiv zwischen technischen und nicht-technischen Stakeholdern zu kommunizieren.

  • Konsistente, versionskontrollierte Dokumentation aufrechtzuerhalten.

  • Sich auf das Wesentlicheauf jeder Abstraktionsebene zu konzentrieren.


🔍 Kernabstraktionen des C4-Modells

The Ultimate Guide to C4 Model Visualization with Visual Paradigm's AI Tools - ArchiMetric

Ebene Konzept Zweck
Ebene 1: Kontext System und Personen Wer nutzt das System? Wie interagiert es mit seiner Umgebung?
Ebene 2: Container Bereitstellbare Einheiten Was sind die hochgradigen technischen Komponenten (Apps, Datenbanken, APIs)?
Ebene 3: Komponenten Logische Gruppierungen Wie ist die Funktionalität innerhalb eines Containers strukturiert?
Ebene 4: Code (optional) Klassen, Schnittstellen, Methoden Implementierungsdetails — typischerweise von IDEs generiert.

✅ Wichtiger GrundsatzNur vergrößern, wenn nötig.Beginnen Sie breit, dann verfeinern Sie schrittweise.


🧩 Wichtige Elemente und Beziehungen

Element Beschreibung Beispiel
Person Menschlicher Akteur oder Benutzer KundeAdministratorDrittanbieter-API
Software-System Ein System, das Wert liefert Internet-Banking-System
Container Bereitstellbare Einheit (Laufzeit- oder bereitstellbare Einheit) Webanwendung, Mikroservice, Datenbank, serverlose Funktion
Komponente Logische Gruppe verwandter Funktionalität AuthentifizierungsmodulZahlungsprozessorMainframe-Fassade
Beziehungen Einfache Sprache zur Beschreibung der Verbindungen zwischen Elementen "Nutzt""Ruft auf""Liest/Schreibt""Hängt ab von"

💬 Nutzen Sie natürliche Sprache für Beziehungen. Vermeiden Sie vage Begriffe wie „verbindet sich mit“.


📊 C4-Modell-Ebenen mit PlantUML-Beispielen

📌 Alle Beispiele verwenden die C4-PlantUML-Bibliothek zur Konsistenz und Automatisierung.


1. Systemkontext-Diagramm (Ebene 1)

Wer nutzt das System? Mit welchen externen Systemen interagiert es?

🎯 Zielgruppe: Nicht-technische Stakeholder, Product Owner, Führungskräfte.

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
LAYOUT_WITH_LEGEND()
title Systemkontext-Diagramm für Online-Banking

Person(kunde, "Kunde", "Ein privater Bankkunde")
System(banking_system, "Online-Banking-System", "Ermöglicht Kunden, Konten einzusehen und Zahlungen vorzunehmen")
System_Ext(hauptrechner, "Hauptrechner-Bankensystem", "Speichert alle Kernbankdaten")

Rel(kunde, banking_system, "Nutzt")
Rel_R(banking_system, hauptrechner, "Holt Kontoinformationen aus")
@enduml

✅ Schwerpunkt: Umfang und Grenzen des Systems.


2. Container-Diagramm (Ebene 2)

Was sind die wichtigsten technischen Komponenten und ihre Technologien?

🎯 Zielgruppe: Architekten, Entwickler, DevOps-Ingenieure.

@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml

Person(kunde, "Kunde", "Ein privater Bankkunde")
System_Boundary(c1, "Internet-Banking-System") {
    Container(web_app, "Web-Anwendung", "Java, Spring MVC", "Stellt Inhalt für den Benutzer bereit")
    Container(api_app, "API-Anwendung", "Java, Spring Boot", "Bietet Funktionalität über JSON/HTTPS")
    ContainerDb(db, "Datenbank", "Relationale Datenbank", "Speichert Benutzerdaten")
}

System_Ext(hauptrechner, "Hauptrechner-Banking-System", "Speichert alle Kernbankdaten")

Rel(kunde, web_app, "Nutzt", "HTTPS")
Rel(web_app, api_app, "Ruft auf", "JSON/HTTPS")
Rel(api_app, db, "Liest/Schreibt", "JDBC")
Rel(api_app, hauptrechner, "Nutzt", "XML/HTTPS")
@enduml

✅ Schwerpunkt: TechnologieauswahlBereitstellungsgrenzenDatenflüsse.


3. Komponentendiagramm (Ebene 3)

Wie ist die API-Anwendung intern aufgebaut?

🎯 Zielgruppe: Entwickler, technische Leiter, Teamleiter.

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
LAYOUT_WITH_LEGEND()
title Komponentendiagramm für die API-Anwendung im Internet-Banking

Container(api_app, "API-Anwendung", "Java, Spring Boot")
ContainerDb(db, "Datenbank", "Relationale Datenbank")
System_Ext(hauptrechner, "Hauptrechner-Banking-System")

Container_Boundary(api_grenze, "API-Anwendung") {
    Component(anmeldung, "Anmelde-Controller", "MVC-Controller", "Ermöglicht Benutzern die Anmeldung")
    Component(sicherheit, "Sicherheitskomponente", "Spring Security", "Verwaltet die Authentifizierung")
    Component(hauptrechner_fassade, "Hauptrechner-Fassade", "DAO", "Kommuniziert mit dem Hauptrechner")

    Rel(anmeldung, sicherheit, "Nutzt")
    Rel(sicherheit, db, "Liest/Schreibt")
    Rel(anmeldung, hauptrechner_fassade, "Nutzt")
    Rel(hauptrechner_fassade, hauptrechner, "Nutzt")
}
@enduml

✅ Schwerpunkt: Interne StrukturVerantwortlichkeitenAbhängigkeiten.


4. Code-Diagramm (Ebene 4 – Optional)

Implementierungsdetails: Klassen, Schnittstellen, Methoden.

🎯 Zielgruppe: Entwickler, Code-Reviewer.

⚠️ Nicht empfohlen, manuell zu zeichnen — am besten über IDEs (z. B. IntelliJ, VS Code) mit automatischen Diagramm-Generierungstools erstellen.

Beispiel (vereinfacht):

@startuml
class SignInController {
  +signIn()
  +validateCredentials()
}

class SecurityComponent {
  +authenticate()
  +generateToken()
}

class MainframeFacade {
  +fetchAccountData()
  +sendTransaction()
}

SignInController --> SecurityComponent : Verwendet
SecurityComponent --> Database : Liest/Schreibt
MainframeFacade --> MainframeAPI : Verwendet
@enduml

✅ Best Practice: Automatisieren diese Ebene mit Werkzeugen wie PlantUML + IDE-Plugins.


✅ Best Practices & Schlüsselprinzipien

Prinzip Warum es wichtig ist
Iterative Verfeinerung Beginnen Sie mit dem Kontext → fügen Sie nur bei Bedarf Details hinzu. Vermeiden Sie übermäßige Dokumentation.
Diagramme als Code Speichern Sie .puml Dateien in Git. Ermöglicht Versionsverwaltung, CI/CD, Zusammenarbeit und Diffs.
Legende einfügen Erklären Sie immer Symbole, Farben und Konventionen (z. B. Rot = ExternBlau = Intern).
Fokus auf Kommunikation Diagramme sollteninformieren, nicht beeindrucken. Einfachheit > Vollständigkeit.
Verwenden Sie „Systemlandschaft“-Diagramme Zeigen Sie, wie mehrere Systeme innerhalb einer Organisation interagieren.
Verwenden Sie „Dynamische“-Diagramme Fügen Sie Ablaufdiagramme hinzu, um das Laufzeitverhalten zu zeigen (z. B. Anmeldevorgang).
Verantwortungsvoll skalieren Ein Komponentendiagramm muss eingeschränkt seininnerhalb eines einzelnen Containers. Mischen Sie keine Container!

🛠 Werkzeuge & Ökosystem

  • PlantUML + C4-PlantUML-Bibliothek – Kostenlos, textbasiert, versionskontrolliert.

  • Visual ParadigmLucidchartDraw.io – Unterstützt C4 über Vorlagen.

  • IDE-Plugins – Generieren Sie C4-Diagramme automatisch aus Code (z. B. IntelliJ + PlantUML-Plugin).

  • CI/CD-Integration – Generieren Sie Diagramme als Teil der Build-Pipelines.


📚 Referenzen & Weiterführende Literatur


🎯 Letzter Gedanke

Das C4-Modell geht es nicht darum, perfekte Diagramme zu erstellen — es geht darum, die richtige Geschichte auf der richtigen Detailtiefe zu erzählen.

Verwenden Sie es, um:

  • Neue Entwickler schneller einzuarbeiten.

  • Teams hinsichtlich der Systemgrenzen auszurichten.

  • Ohne Fachjargon mit Stakeholdern zu kommunizieren.

  • Die Architekturdokumentation gemeinsam mit dem Code weiterzuentwickeln.


✅ Pro-Tipp: Beginnen Sie mit einem Systemkontext Diagramm. Dann entwickeln Sie das Modell weiter, je nach Bedarf Ihres Teams — wie das Erstellen einer Karte Schritt für Schritt.


Lassen Sie mich wissen, wenn Sie möchten:

  • Eine herunterladbare PDF-Version dieses Leitfadens

  • Ein Vorlagen-Repository mit C4-Diagrammen in Git

  • Automatisierungsskripte zum Generieren von C4-Diagrammen aus Code

  • Ein Vergleich mit anderen Modellen (z. B. 4+1-View, Zachman)

Viel Spaß beim Zeichnen von Diagrammen! 🖥️📘