Law of Demeter
Details
- Vollständiger Name
-
Law of Demeter (LoD), Gesetz von Demeter
- Auch bekannt als
-
Principle of Least Knowledge, „Sprich nicht mit Fremden"
Kernkonzepte:
- Sprich nur mit direkten Freunden
-
Eine Methode darf Methoden aufrufen auf: sich selbst, ihren Parametern, von ihr erzeugten Objekten und ihren direkten Komponenten — aber nicht auf Objekten, die diese Aufrufe zurückgeben
- Train-Wreck-Aufrufe
-
Ketten wie
a.getB().getC().doSomething()greifen durch Zwischenobjekte und koppeln den Aufrufer an einen tiefen Objektgraphen — die klassische LoD-Verletzung - Tell, don’t ask
-
Verhalten in das Objekt verschieben, das die Daten besitzt, statt Daten herauszuziehen und extern darauf zu operieren
- Kapselungsgrenze
-
LoD begrenzt, wie viel interne Struktur eines Objekts zu seinen Kollaborateuren durchsickert, damit interne Änderungen nicht nach außen wirken
- Pragmatische Grenzen
-
Eine Heuristik, kein Absolutum; Fluent Builder und manche Data-Pipeline-/Query-DSLs verketten bewusst und sind sinnvolle Ausnahmen
- Key Proponents
-
Ian Holland & Karl Lieberherr (Northeastern University, Demeter-Projekt, 1987); popularisiert durch „The Pragmatic Programmer" (Hunt & Thomas)
Verwendung:
-
Code-Review auf versteckte Kopplung und fragile Aufrufketten
-
Entwurf von Objekt-APIs, die ihre interne Struktur verbergen
-
Vermittlung von Kapselung und „tell, don’t ask"
-
Refactorings weg von Train-Wreck-Ausdrücken anleiten
Nicht verwenden:
-
Für Fluent Interfaces / Builder, bei denen Verkettung gewollt ist
-
Für immutable Value Objects und Data-Query-DSLs, deren Zweck die Traversierung ist
Verwandte Anker:
-
SOLID Principles — ergänzende Kopplungs-/Kohäsions-Leitlinien
-
GRASP — Low Coupling und Information Expert überlappen mit LoD
-
Kohäsionskriterien — die Kohäsions-Seite desselben Designthemas