Meisterung von Architekturvisualisierungen: So erstellen Sie ein C4-Systemkontextdiagramm in PlantUML

Bei der Gestaltung von Softwaresystemen ist es unerlässlich, hohe Ebenen der Systemgrenzen sowohl für technische als auch für nicht-technische Stakeholder klar zu kommunizieren. In diesem Masterclass-Tutorial werden wir Schritt für Schritt durchgehen, wie man ein professionelles C4-Systemkontextdiagramm von Grund auf mit PlantUML innerhalb des kostenlosen ” erstellt.VPasCode” Editor.

C4 System Context diagram for an online grocery store showing customer, delivery driver, payment gateway, and logistics provider interactions.

Warum einen Diagram-as-Code-Ansatz für C4-Modelle verwenden?

Traditionelle Drag-and-Drop-Zeichenwerkzeuge führen häufig zu fehl ausgerichteten Boxen, inkonsistentem Styling und mühsamen manuellen Aktualisierungen, sobald sich die Architektur ändert. Durch die Nutzung eines “Diagram-as-Code-Tools”wie einen kostenlosen PlantUML-Editor, bleibt Ihre Dokumentation mit dem Code synchronisiert, versioniert und sauber. Die Verwendung von “VPasCode”erhalten Sie Echtzeit-Rendering und automatische Formaterkennung, die die Visualisierung von Softwarearchitektur mühelos machen.

Das Masterclass-Fallstudienbeispiel: Online-Grocery-Store-Architektur

Um zu demonstrieren, wie man ein robustes Systemkontextdiagramm strukturiert, betrachten wir eine Online-Grocery-Store-Plattform. Diese Architektur muss Endnutzer, externe Lieferfahrer, das Kern-Grocery-System sowie Drittanbieterdienste wie Zahlungs-Gateways und Logistikdienstleister erfassen.

Hier ist der vollständige PlantUML-Quellcode, den wir Schritt für Schritt aufschlüsseln werden:

@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
skinparam vpDiagramType C4modelSystemContextDiagram

LAYOUT_TOP_DOWN()
LAYOUT_WITH_LEGEND()

title System Context diagram for Online Grocery Store

Person(customer, "Kunde", "Durchsucht den Store, bestellt Lebensmittel und plant die Lieferung")
Person_Ext(driver, "Lieferfahrer", "Liefert Bestellungen an Kunden aus")

Enterprise_Boundary(grocery_co, "Online-Grocery-Store") {
  System(grocery_system, "Online-Grocery-Store-System", "Ermöglicht Kunden, Lebensmittel online zu bestellen und verwaltet die Auslieferung")
}

System_Ext(payment, "Zahlungs-Gateway", "Verarbeitet Karten- und Digital-Wallet-Zahlungen")
System_Ext(shipping, "Logistikdienstleister", "Plant Lieferwege und plant Fahrer ein")

Rel(customer, grocery_system, "Durchsucht Produkte und legt Bestellungen auf", "HTTPS")
Rel(grocery_system, payment, "Verarbeitet Zahlungen über", "HTTPS/API")
Rel(grocery_system, shipping, "Erstellt Lieferaufträge über", "HTTPS/API")
Rel(driver, grocery_system, "Zeigt Lieferaufträge an", "HTTPS")

@enduml

Schritt-für-Schritt-Durchlauf des Codes

1. Einrichten der grundlegenden Umgebung

Ich beginne damit, das Skript mit standardmäßigen PlantUML-Tags zu initialisieren und die offiziellen C4-PlantUML-Standardbibliotheks-Makros zu importieren. Durch die Referenzierung von “C4_Context.puml"schalten wir semantische Elemente frei, die speziell für Systemkontextdiagramme entwickelt wurden.

  • Bibliotheks-Einbindung: !include .../C4_Context.pumllädt Standardformen, Farben und Styling-Regeln für Personen, Systeme und Grenzen.
  • Diagrammtyp und Layout:Das Festlegen von “skinparam vpDiagramType C4modelSystemContextDiagram"sichert eine ordnungsgemäße Integration innerhalb von “VPasCode”, während “LAYOUT_TOP_DOWN()"organisiert die visuelle Hierarchie sauber von oben nach unten. Ich aktiviere auch “LAYOUT_WITH_LEGEND()um automatisch eine hilfreiche Referenzanleitung unten rechts auf der Zeichenfläche zu generieren.

2. Definieren von Akteuren und Benutzern

Als Nächstes muss ich die menschlichen Akteure definieren, die mit unserem Ökosystem interagieren. Ich unterscheide zwischen standardmäßigen Systembenutzern und externen Entitäten unter Verwendung spezifischer C4-Makros:

  • Der Kernbenutzer: Ich erstelle einen primären Benutzer mit Person(customer, "Kunde", ...) der Bestellungen aufgegeben und den Lagerbestand durchsucht.
  • Der externe Akteur: Ich definiere einen Zustellfahrer mit Person_Ext(driver, "Zustellfahrer", ...) um hervorzuheben, dass sie zwar mit unserem Erfüllungsfluss interagieren, sich jedoch außerhalb unseres Kernsicherheitsbereichs befinden.

3. Festlegen von Organisationsgrenzen und Kernsystemen

Architektonische Klarheit erfordert klare Grenzen. Um zu umschreiben, was unser Unternehmen besitzt versus was auf externe Anbieter angewiesen ist, lege ich eine Unternehmensgrenze fest:

  • Unternehmensgrenze: Unter Verwendung von Enterprise_Boundary(grocery_co, "Online-Grocery-Store") erstellt eine gestrichelte Containerbox, die die interne Infrastruktur visuell gruppiert.
  • Internes System: Innerhalb dieser Grenze platziere ich unser Hauptsoftware-Asset mit System(grocery_system, "Online-Grocery-Store-System", ...).

4. Einbinden externer Systeme

Keine moderne E-Commerce-Plattform arbeitet isoliert. Ich definiere externe Abhängigkeiten außerhalb der Unternehmensgrenze unter Verwendung spezialisierter Makros für externe Systeme:

  • Zahlungsabwicklung: System_Ext(payment, "Zahlungs-Gateway", ...) stellt Finanztransaktionen von Drittanbietern dar.
  • Logistik & Versand: System_Ext(shipping, "Logistikanbieter", ...) übernimmt die Routenplanung und Fahrerzuweisung.

5. Abbildung von Beziehungen und Protokollen

Um die Architektur zu verbinden, erstelle ich eine Übersicht über gerichtete Interaktionen und Kommunikationsprotokolle mithilfe des Rel()-Makros:

  • Kundenablauf: Rel(customer, grocery_system, "Durchsucht Produkte und legt Bestellungen auf", "HTTPS")veranschaulicht, wie sich Benutzer sicher mit der Kernplattform verbinden.
  • Backend-Integrationen: Ich bilde Backend-Abhängigkeiten wie Zahlungsabwicklung und Versandanbieter mit expliziten Protokollkennzeichnungen ("HTTPS/API") ab, um Ingenieuren sofortigen technischen Kontext zu geben.

Fazit & Probieren Sie es selbst aus

Das Erstellen sauberer Software-Architekturdiagramme erfordert keine umständlichen Desktop-Tools oder komplexe Dateikonfigurationen. Durch die Kombination der leistungsstarken C4-Syntax von PlantUML mit VPasCodekönnen Sie Architekturdiagramme in Sekundenschnelle schreiben, rendern und teilen.

A screenshot of Visual Paradigm VPasCode showing the creation of a C4 System Context Diagram

Bereit, Ihre eigene Systemarchitektur zu erstellen? Besuchen Sie den kostenlosen VPasCode-Online-Editor, fügen Sie diesen Code-Schnipsel ein und beobachten Sie, wie Ihr Diagramm in Echtzeit gerendert wird!

Nach oben scrollen