Die Serie
Katalogeintrag
Name, Kurzform | Acyclic-Dependencies Prinzip |
Synonyme |
ADP,
Prinzip der
azyklischen Abhängigkeiten |
Beschreibung |
Die
Abhängigkeiten zwischen Software-Elementen auf den Ebenen der
Typen, der Pakete und der physischen Einheiten sollten azyklisch
sein.
|
Erläuterung |
Etablierte
Fassungen des Prinzips wie z. B. diejenige von Robert C. Martin
(„Die
Abhängigkeiten zwischen Packages müssen einem gerichteten
azyklischen Graphen entsprechen. Das bedeutet, dass es keine
Zyklen in der Abhängigkeitsstruktur geben darf.“ [Granularity1996])
beziehen sich unnötigerweise lediglich auf Pakete und erheben
einen absoluten Anspruch auf Einhaltung. Dieser
Absolutheitsanspruch diskreditiert jedoch die Korrektheit des
Prinzips, da es nach der Intuition vieler Entwickler auch
zahlreiche harmlose Ausnahmen gibt. Dies führt wiederum zu einer
generellen Missachtung oder zu pauschalen Rechtfertigungsmustern.
Die
obige Fassung des Prinzips umfasst alle relevanten Ebenen und
fordert keine absolute Einhaltung. Zahlreiche der oben
referenzierten Artikel liefern Differenzierungsmöglichkeiten, um
für jedes Software-System auf der Grundlage der
Systemeigenschaften und der verfügbaren Analysewerkzeuge
entscheiden zu können, welche Zyklen als potentiell schädlich eingestuft werden sollen. Wichtige Kriterien bei dieser Einstufung
sind die Topologie der Zyklen, ihre metrischen Eigenschaften,
die Eigenschaften der Domäne sowie im Falle von Typ-Zyklen
deren Einbettung in die Pakethierarchie.
Entscheidend
ist im Einzelfall, welchen potentiellen Schaden ein Zyklus
anrichten kann oder bereits anrichtet. Zwei Arten der
Schädlichkeit wurden in dem Artikel Wo liegt das Problem?
identifiziert:
Bei
der Beurteilung von Zyklen ist also immer zu beurteilen, inwieweit
durch sie Symptome der Infizierbarkeit und Schwergewichtigkeit
verursacht werden.
Für
die Ebene physischer Einheiten kann festgehalten werden, dass
Zyklen praktisch immer als schädlich einzustufen sind, da sie den
Existenzgrund einer solchen Einheit, der auf ihrer unabhängigen
Releasefähigkeit und Wiederverwendbarkeit basiert, generell in
Frage stellen. Siehe hierzu auch das Reuse-Release Equivalence Prinzip. [Knoernschild2012], der sich auf die Ebene
physischer Einheiten bezieht, schreibt: „Allgemein
gesprochen sind Zyklen immer schädlich. Einige sind jedoch
schädlicher als andere.“
|
Beispiel(e) | Siehe zahlreiche ausführliche Beispiele in der oben referenzierten Artikelserie. |
Historie |
|
Art des Prinzips |
|
Grad der formalen Spezifikation | Hoch. In vielen Fällen werkzeuggestützt überprüfbar. |
Vorteile |
|
Nachteile |
|
Übergeordnete Prinzipien | Prinzip der losen Kopplung |
Abgleitete Prinzipien | - |
Qualitätsmerkmale |
(+)
Änderbarkeit, (+) Wartbarkeit,
(+)
Komplexität, (+) Wiederverwendbarkeit,
(+)
Austauschbarkeit, (+) Überprüfbarkeit |
Quellen
[Granularity1996]
–
Granularity,
Robert
C. Martin,
in:
IEEE
Software.
Dezember
1996, S. 4, siehe
http://www.objectmentor.com/resources/articles/granularity.pdf
[Knoernschild2012] - Java Application Architecture: Modularity Patterns with Examples Using OSGi, Kirk Knoernschild (2012)
[Knoernschild2012] - Java Application Architecture: Modularity Patterns with Examples Using OSGi, Kirk Knoernschild (2012)
[Lakos1996]
- Large-Scale C++
Software Design,
John Lakos (1996)
[Martin
2002] – Agile Software Development. Principles, Patterns, and
Practices, Robert C. Martin (2002)
[Parnas1978] - Designing Software for Ease of Extension and Contraction, siehe Abschnitt "D. Loops in the 'Uses' Relation", David L. Parnas (1978), siehe http://www.cs.umd.edu/class/spring2003/cmsc838p/Design/family.pdf