Was ist ein C4-Komponentendiagramm?
Das Komponentendiagramm istEbene 3im C4-Modell von Simon Brown. Es zoomt in aufeinen bestimmten Container (aus dem Containerdiagramm der Ebene 2) um Folgendes zu zeigen:

-
Dielogischen Bausteine (Komponenten), aus denen dieser Container besteht.
-
Wie diese Komponentenmiteinander interagierenuntereinander.
-
Verantwortlichkeiten undImplementierungstechnologien (auf einer höheren Ebene als Klassen – denken Sie an Spring-Beans, Module, Dienste, Controller, Fassaden usw.).
-
WichtigeSchnittstellen oderVerträge zwischen Komponenten (häufig über Beziehungen impliziert).
Wichtige Klärung: Eine „Komponente“ im C4 istnichteine Klasse. Sie ist einelogische Gruppierung von Klassen hinter einer gut definierten Schnittstelle – etwas mit klarer Verantwortung, das teilweise unabhängig entwickelt/getestet/bereitgestellt werden kann (innerhalb des Containers), abernicht separat bereitstellbar wie ein Container.
Beispiele für Komponenten:
-
REST-Controller / Web-Controller
-
Service / Use Case / Anwendungsservice
-
Repository / Datenzugriffsobjekt
-
Domänenmodell / Entität
-
Sicherheit / Authentifizierungsmodul
-
Benachrichtigungssender
-
Facade für externe Systeme
-
Geschäftsregel-Engine
-
Caching-Ebene
Das Diagramm bleibt logisch / implementierungsunabhängig genug — keine Klassenattribute, Methodensignaturen oder vollständigen UML-Klassendetails (das ist Level-4-Code, der optional und selten ist).
Wann ein Komponentendiagramm erstellt werden sollte
Erstellen (und pflegen) eines Komponentendiagramms nur wenn:
-
Der gewählte Container ist komplex genug dass seine interne Struktur nicht allein aus Namen und Beschreibung ersichtlich ist.
-
Neue Teammitglieder (insbesondere Backend-Entwickler) fragen häufig: „Wie wird Funktion X tatsächlich innerhalb dieses Dienstes/API implementiert?“
-
Sie sind Refactoring, Aufteilung, oder Extrahieren Logik innerhalb eines Containers und müssen Grenzen/Zuständigkeiten klären.
-
Sie führen detaillierte Designbesprechungen, Code-Reviews, oder On-Call-Übergaben für einen bestimmten Container.
-
Sie möchten dokumentieren wichtige architektonische Entscheidungen innerhalb eines Containers (z. B. hexagonale Architektur, vertikaler Slice, Trennung von CQRS, Sicherheits-Enforcement-Punkt).
-
Sie haben identifiziert technische Schuld, Gott-Klassen, oder enge Kopplung innerhalb eines Containers und möchten den Zustand vor der Bereinigung visualisieren.
-
Sie onboarden erfahrene Entwickler/Architekten, die die Modulstruktur schnell verstehen müssen.
TUN SIE NICHT Komponentendiagramme für folgendes erstellen:
-
Einfache Container (CRUD-API mit einem Controller + einer Service-Komponente + einer Repository-Komponente – offensichtliche Struktur).
-
Die meisten Microservices (oft so klein, dass die Container-Ebene ausreicht).
-
Frontend-Container (React/Vue-Anwendungen – meist besser mit Komponentenbäumen oder Storybook dargestellt).
-
Wenn Ebene 2 (Container) zusammen mit guter Code-Struktur/Namenskonvention bereits alles kommuniziert, was benötigt wird.
Simon Brown empfiehlt: Die meisten Teams können bei Ebene 1 + 2 bleiben. Gehen Sie nur bei den folgenden Ebenen 3: die komplizierten / riskanten / zentralen / hochfrequenten Container.
Warum Komponentendiagramme verwenden? (Wichtige Vorteile)
-
Klärt interne Verantwortlichkeiten — Zeigt die Trennung der Verantwortlichkeiten (z. B. Controller vs Services vs Datenzugriff vs externe Integration).
-
Deckt Kopplung und Abhängigkeiten auf — Zeigt Gottes-Komponenten, zyklische Abhängigkeiten oder übermäßige Abhängigkeit von Infrastruktur-Code sichtbar.
-
Unterstützt eine bessere Einarbeitung und Übergaben — Entwickler verstehen Modul-Grenzen schneller als das Lesen aller Quelldateien.
-
Leitet Refactoring und Evolution an — Visueller Baseline vor/nach der Aufspaltung von Monolithen oder Einführung von Mustern (Ports & Adapter, vertikale Slices).
-
Ermöglicht Architektur-Reviews und Bedrohungsmodellierung — Identifiziert, wo Validierung, Autorisierung, Protokollierung usw. stattfinden.
-
Architektur als Code — Wenn in PlantUML gespeichert → mit dem Codebase versioniert, vergleichbar, in PRs überprüfbar.
-
Skaliert die Kommunikation — Senior-Entwickler kümmern sich um Komponentenverantwortlichkeiten; Junior-Entwickler kümmern sich darum, wo neuer Code hingehört.
Wie man ein großartiges Komponentendiagramm erstellt (Schritt-für-Schritt-Anleitung + Best Practices)
-
Wählen Sie EINEN Container — Beginnen Sie mit dem komplexesten oder geschäftskritischsten (häufig der Haupt-API-/Backend-Service).
-
Kopieren Sie den Kontext von Ebene 2 — Fügen Sie externe Akteure (andere Container, Personen, externe Systeme) hinzu, die mit diesem Container interagieren.
-
Zeichnen Sie die Container-Grenze — Verwenden Sie
Container_Grenzein PlantUML, um klar zu definieren, was „innerhalb dieses Containers“ liegt. -
Identifizieren Sie Komponenten — Fragen Sie:
-
Welche sind die wichtigsten Module / Spring-Beans / Pakete / begrenzten Kontexte innerhalb?
-
Wo landen eingehende Anfragen? (Controller/Handler)
-
Wo wird die Geschäftslogik orchestriert?
-
Wo wird Daten zugegriffen / zwischengespeichert / validiert?
-
Wo werden Querschnittsaspekte behandelt? (Sicherheit, Protokollierung)
-
Gibt es Fassaden / Anti-Korruptionsschichten zu Legacy-/externen Systemen?
-
-
Technologie und kurze Beschreibung hinzufügen — Name, Technologie (Spring-Service, .NET-Handler, Go-Modul usw.), kurze Zweckangabe (< 15 Wörter).
-
Wechselwirkungen definieren — Richtung und Absicht anzeigen (Verwendet, Ruft auf, Liest von, Veröffentlicht Ereignisse an). Das Protokoll wird auf dieser Ebene oft weggelassen.
-
Best Practices
-
Umfang begrenzen — Maximal 6–12 Komponenten pro Diagramm. Bei mehr → fokussierte Unterdarstellungen erstellen (z. B. „Authentifizierungs-Slice“).
-
Sinnvoll benennen — Bevorzugen Sie „Order Placement Service“ anstelle von „OrderService“.
-
Verantwortlichkeiten anzeigen, nicht Klassen — Vermeiden Sie die Auflistung jeder Klasse; gruppieren Sie logisch.
-
Symbole sparsam verwenden — Nur wenn sie die Technologie klären (Spring-, .NET-Symbole).
-
Legende aktivieren — Hilft neuen Lesern.
-
Layout sauber halten —
LAYOUT_MIT_LEGENDEN(),LAYOUT_OBEN_UNTEN(). -
Version im Repository — .puml-Dateien neben dem Container-Code.
-
Iterieren — Aktualisieren Sie während Refactoring-Spikes oder quartalsweisen Architektur-Check-ups.
-
PlantUML-Beispiel – Internet-Banking-System-API-Anwendung (klassischer Big Bank plc-Stil)
Hier ist ein Produktions-Beispiel unter Verwendung der offiziellen C4-PlantUML-Bibliothek – das am häufigsten zitierte echte Beispiel.
@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
title Komponentendiagramm: Internet-Banking-System - API-Anwendung
' Akteure / externe Teile auf Container-Ebene
Container(spa, "Einzelseiten-Anwendung", "JavaScript & Angular", "Bietet Internet-Banking-Oberfläche über Browser")
Container(mobile, "Mobile App", "iOS/Android", "Bietet eingeschränkte mobile Bankfunktionen")
ContainerDb(database, "Bankdatenbank", "PostgreSQL", "Speichert Benutzereinstellungen, zwischengespeicherte Daten, Sitzungen")
System_Ext(mainframe, "Kernbank-System", "Mainframe – Kernkonten & Transaktionen")
' Der Container, in den wir hineinzoomen
Container_Boundary(api, "API-Anwendung") {
Component(signInCtrl, "Anmelde-Controller", "Spring MVC REST-Controller", "Verwaltet Authentifizierung & Sitzungserstellung")
Component(accountsCtrl, "Konten-Zusammenfassungs-Controller", "Spring MVC REST-Controller", "Bietet Kontostände & Zusammenfassungen")
Component(resetPwdCtrl, "Passwort-Zurücksetzungs-Controller", "Spring MVC REST-Controller", "Verwaltet Ablauf des Passwort-Zurücksetzens")
Component(security, "Sicherheitskomponente", "Spring-Bean", "JWT-Tokens, Passwort-Hashing, Rollenprüfungen")
Component(accountService, "Kontoverwaltungs-Komponente", "Spring-Bean / Service", "Orchestriert Kontenabfragen & Geschäftsregeln")
Component(mainframeFacade, "Mainframe-Bank-Fassade", "Spring-Bean", "Anti-Korruptionsschicht für Legacy-Mainframe")
Component(emailNotifier, "E-Mail-Benachrichtigungs-Komponente", "Spring-Bean", "Sendet Bestätigungs- & Zurücksetzungs-E-Mails")
}
' Beziehungen innerhalb der Grenze
Rel(signInCtrl, security, "Verwendet")
Rel(accountsCtrl, accountService, "Verwendet")
Rel(resetPwdCtrl, security, "Verwendet")
Rel(resetPwdCtrl, emailNotifier, "Verwendet")
Rel(accountService, mainframeFacade, "Verwendet")
Rel(accountService, database, "Liest von und schreibt in", "JDBC")
Rel(mainframeFacade, mainframe, "Verwendet", "XML/HTTPS")
Rel(emailNotifier, database, "Liest Benutzereinstellungen", "JDBC")
' Eingehende Aufrufe von Frontends
Rel(spa, signInCtrl, "Verwendet", "JSON/HTTPS")
Rel(spa, accountsCtrl, "Verwendet", "JSON/HTTPS")
Rel(spa, resetPwdCtrl, "Verwendet", "JSON/HTTPS")
Rel(mobile, signInCtrl, "Verwendet", "JSON/HTTPS")
Rel(mobile, accountsCtrl, "Verwendet", "JSON/HTTPS")
Rel(mobile, resetPwdCtrl, "Verwendet", "JSON/HTTPS")
LAYOUT_MIT_LEGENDEN()
LAYOUT_LINKS_RECHTS()
@enduml
Dies ergibt:
-
Klare Grenze um den API-Container
-
Logische Gruppierung von Controllern, Services und Facades
-
Genau definierte Verantwortlichkeiten
-
Wichtige Wechselwirkungen und Abhängigkeiten
-
Automatische Legende für bessere Lesbarkeit
Einfügen in PlantUML-Renderer (online oder IDE) – Anpassen von Namen/Technologien für Ihr System.
Verwenden Sie dieses Muster als Ausgangsvorlage. Das Ziel ist immer effektive Teamkommunikation – nicht Diagrammschönheit. Viel Spaß beim Modellieren!
Ressource für C4-Komponenten-Diagramme
- Ultimativer Leitfaden zur Visualisierung des C4-Modells mit den KI-Tools von Visual Paradigm: Dieser Leitfaden erklärt, wie Sie KI-gestützte Werkzeuge nutzen, um die Visualisierung des C4-Modells zu automatisieren und zu verbessern, um eine schnellere Software-Architektur-Entwicklung zu ermöglichen.
- Nutzen Sie Visual Paradigms AI C4 Studio zur vereinfachten Architekturdokumentation: Dieser Artikel beschreibt die Verwendung eines KI-optimierten Studios zur Erstellung sauberer, skalierbarer und wartbarer Dokumentation der Softwarearchitektur.
- Der ultimative Leitfaden zum C4-PlantUML Studio: Die Revolutionierung der Software-Architektur-Entwicklung: Diese Ressource untersucht die Kombination von KI-getriebener Automatisierung, der Klarheit des C4-Modells und der Flexibilität von PlantUML zu einem einzigen leistungsstarken Werkzeug.
- Ein umfassender Leitfaden zu Visual Paradigms KI-gestütztem C4-PlantUML Studio: Dieser Leitfaden beschreibt ein speziell entwickeltes Werkzeug, das Ende 2025 veröffentlicht wurde und natürliche Sprachbefehle in mehrschichtige C4-Diagramme umwandelt.
- C4-PlantUML Studio | KI-gestützter C4-Diagramm-Generator: Diese Funktionsübersicht hebt ein KI-getriebenes Werkzeug hervor, das entwickelt wurde, um C4-Softwarearchitektur-Diagramme aus einfachen Textbeschreibungen zu generieren.
- Erzeugen und Ändern von C4-Komponentendiagrammen mit dem AI-Chatbot von Visual Paradigm: Dieses Tutorial zeigt, wie ein KI-gestützter Chatbot verwendet wird, um schrittweise die Architektur auf Komponentenebene für komplexe Systeme zu erstellen und zu verfeinern.
- KI-gestützter C4-Diagramm-Generator: Kernlevel und unterstützende Ansichten: Diese Seite erklärt, wie der KI-Generator die vier Kernlevel des C4-Modells – Kontext, Container, Komponente und Bereitstellung – unterstützt, um umfassende Dokumentation zu ermöglichen.
- KI-Diagramm-Generator: Release mit vollständiger Unterstützung für das C4-Modell: Dieses Update beschreibt die Integration von KI-gestützten Funktionen zur automatisierten Erstellung hierarchischer C4-Modell-Diagramme.
- KI-Generator für das C4-Modell: Automatisierung des gesamten Modellierungslebenszyklus: Diese Ressource hebt hervor, wie ein spezialisierter KI-Chatbot konversationelle Eingaben nutzt, um Konsistenz in der Architekturdokumentation für DevOps-Teams zu gewährleisten.
- Umfassende Bewertung: Allgemeine KI-Chatbots im Vergleich zu Visual Paradigms C4-Werkzeugen: Dieser Vergleich erklärt, warum spezialisierte Werkzeuge wie das C4-PlantUML Studio strukturiertere und professionellere Ergebnisse liefern als allgemeine Sprachmodelle.
Der Artikel ist auch in English verfügbar.

