Inhaltsverzeichnis

27. Dependency-Inversion-Prinzip

Themen
Das Dependency-Inversion-Prinzip
Beispiele für seinen Einsatz
Bedeutung im Gesamtkontext der Software-Architektur
Glossar
PDF
Kapitel bei Springer
https://link.springer.com/chapter/10.1007/978-3-662-71607-6_27


Zentrale Aspekte

Zusammenfassung

Die Kernaspekte einer Anwendung sollten nicht von ihrer Peripherie abhängen – sondern beide von Abstraktionen. Das Ziel aller Softwarearchitektur ist eine flexible Anwendung, die sich einfach erweitern lässt und aus wiederverwendbaren, entsprechend voneinander unabhängigen Komponenten besteht. Entscheidend ist dabei die Richtung von Abhängigkeiten. Der naive Ansatz führt meist zu Abhängigkeiten innerhalb der Software, die in die gleiche Richtung wie der Kontrollfluss zeigen. Soll die aufgerufene Komponente ausgetauscht oder verändert werden, muss in der Regel auch die aufrufende Komponente verändert werden. Das aber widerspricht dem Ziel flexibler, erweiterbarer, letztlich modularer Software.

Der Kerngedanke des Dependency-Inversion-Prinzips (DIP) und gleichzeitig der Grund für seinen Namen ist die Umkehr der üblichen Abhängigkeiten, die parallel zum Kontrollfluss verlaufen. Das führt zu einer Entkopplung von Klassen voneinander und sorgt im Kontext des DIP für eine Modularität auch über Schichtgrenzen einer Gesamtanwendung hinweg.

Anwendungsentwicklung zielt auf die zugrundeliegenden Abstraktionen und ihre stabilen, abstrakten Schnittstellen. Anwendungen bestehen aus klar getrennten Schichten, die Dienste über definierte Schnittstellen bereitstellen. Die Anwendungslogik steht dabei im Zentrum, sowohl Datenquellen als auch Nutzerschnittstellen sind peripher. Diese zunächst ungewohnte Umkehr der Abhängigkeiten sorgt für Unabhängigkeit und intrinsische Testbarkeit der einzelnen Schichten. Die korrekte Anwendung des DIP ist ein grundlegender Mechanismus für die objektorientierte Programmierung – und entscheidet darüber, ob ein Entwurf im eigentlichen Sinn objektorientiert ist oder nicht.

Fragen zur Vertiefung und Wiederholung

Diese Fragen dienen der persönlichen Beschäftigung mit der Thematik, es werden aber keine Antworten zur Verfügung gestellt.

Weiterführende Literatur

Eine kommentierte und handverlesene Liste mit weiterführender Literatur zum Thema. Die Auswahl ist zwangsläufig subjektiv.

Wie alle anderen SOLID-Prinzipien wurde das DIP von Robert C. Martin prägnant formuliert. Vergleiche dazu Kapitel 11 in [Martin, 2003Martin, Robert C. (2003): Agile Software Development. Principles, Patterns, and Practices, Prentice Hall, Upper Saddle River, New Jersey] und Kapitel 11 in [Martin, 2018Martin, Robert C. (2018): Clean Architecture. A Craftman's Guide to Software Structure and Design, Prentice Hall, Boston]. Das Pendant auf höherer architektonischer Ebene, das Zusammenspiel von Stable-Dependencies- und Stable-Abstractions-Prinzip, wird von Robert C. Martin ebenda in späteren Kapiteln formuliert.

Die dem DIP zugrunde liegenden Entwurfsmuster, insbesondere „Abstract Factory“, finden sich im Buch der „Gang of Four“ [Gamma, 1995Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995): Design Patterns. Elements of Reusable Object-Oriented Software, Addison-Wesley, Boston] wieder.