Systemarchitektur und Coupling
Um was geht es hier?
In diesem Beitrag möchte ich kurz eine Entwurfsrichtlinie mit dem Namen Kopplung(engl.Coupling) vorstellen.
Hintergrund hierbei ist folgende Frage?
Worauf muss ich bei der Erstellung einer System-Architektur achten, damit die angestrebte Lösung die Eigenschaften besitzt wie:
- Wartbarkeit
- Änderbarkeit
- Verständlichkeit
- Austauschbarkeit
Die Antwort hierauf lautet:
„Achte auf den Grad der Kopplung zwischen den Komponenten!“
Was hierunter zu verstehen ist und was in der Praxis beachten ist, möchte ich in diesem Beitrag kurz vorstellen.
Zunächst stellt sich aber die Frage: Was bedeutet Kopplung?
Was bedeutet Kopplung?
Kopplung ist ein Maß, wie eng oder lose zwei Komponenten miteinander gekoppelt sind.

Somit beschreibt die Kopplung den Grad der Abhängigkeit einer Komponente nach außen hin.
Es ist anzustreben, dass die Kopplung zwischen allen Komponenten eines Systems lose ist (im Sinne von gering).
Warum soll die Kopplung lose sein?
Ist eine Komponente mit einer losen / geringen Kopplung zu anderen Elementen, dann ist diese Komponente:
- Einfacher auszutauschen
- Einfacher wiederzuverwenden
- Einfacher zu testen
- Einfacher zu verstehen
- Einfacher zu ändern

Stellt sich nun die Frage:
Wie erkenne ich den Grad der Kopplung einer Komponente?
Wie erkenne ich den Grad der Kopplung einer Komponente?
Kopplung ist ein Maß für die Unabhängigkeit von Softwarekomponenten. Der Grad der Kopplung ist somit eine skalare Größe.
Hierbei unterscheiden man zwischen direkten oder indirekten Abhängigkeiten.
Direkte Abhängigkeiten sind:
- Alle Kenntnisse darüber, wie ich eine andere Komponente ansteuern muss um sie zu verwenden
- Alle Annahmen darüber, die ich über die andere Komponente mache
Indirekt Abhängigkeiten sind:
- alle Elemente, die die andere Komponente benötigt um ihre Funktion zu erbringen.
Schauen wir uns als nächstes ein paar Beispiele an, um den Grad der Kopplung besser zu verstehen.
Beispiel bei der Verwendung einer JAVA Klasse / Apis
Nachfolgend ein Beispiel aus der Java-Welt.

Beispiel bei der Verwendung eines RESTful APis
RESTFUL API siehe Restfulapi.net

Mögliche weitere Coupling-Aspekte können sein:
- Annahmen über Zeitzone des Kommunikationspartners
- Annahmen über Zeichenkodierungen (nicht UNICODE Standards)
- Annahmen über Datenformate wie Datumsangaben, Nummernformate uns.
- Annahmen über das Format von Textnachrichten (i.e. Sprache)
Beispiel bei der Verwendung von MQTT
MQTT siehe mqtt.org
Wie nachfolgender Abbildung zu entnehmen ist, besteht bei der Verwendung von MQTT zusätzlich zu dem verwendeten API die Abhängigkeit zu dem Topic Schema und dem Paylod einer Nachricht.

Tip für die Praxis
Indikator | Grad der Kopplung |
---|---|
Ich kenne von der anderen Komponente nur die Schnittstelle und die Daten | geringe Kopplung |
Die Methoden der anderen Komponente muss man in einer vordefinierten Reihenfolge aufrufen | mittlere bis hohe Kopplung |
Ich weiß, wie die andere Komponente funktioniert und welche Zustände sie annehmen kann | hohe Kopplung |
