Gesetz von demeter sagt, dass ein Objekt eine Methode M von einem Objekt B von einem Objekt A nicht aufrufen kann. Aber gilt es auch für Immobilien? Beispiel?
%Vor%Kann ich so etwas machen?
%Vor%oder soll ich das tun:
%Vor%Gibt es ein Problem (nach dem Gesetz), wenn ich von A auf eine B-Methode zugreife?
Ja, das gilt auch für Eigenschaften, da der Client dieses Codes:
%Vor% ist an A
und auch an B
gekoppelt.
Wenn Sie das Gesetz der Demeter-Verstöße festlegen, müssen Sie die Notwendigkeit der Entkoppelung und die Notwendigkeit, die Zuständigkeiten klar getrennt zu halten, abwägen. Manchmal können Sie Demeter-Transmogrifier erstellen: Klassen, die zu viele nicht verwandte Methoden haben, nur um dem Demeter-Gesetz zu entsprechen.
Update : Ein Beispiel für einen Demeter Transmogrifier finden Sie in diesen Beitrag :
Betrachten wir zum Beispiel jemanden, der versucht, sich an seinen Boss zu küssen:
sendFlowers(john.getManager().getSpouse())
. Das Anwenden von Hide Delegate würde einegetManagersSpouse()
-Methode in Employee ergeben. Yuck.
Tags und Links c# design-patterns law-of-demeter