Nicht unbedingt. "Nur einen Punkt verwenden" ist eine ungenaue Zusammenfassung des Demeter-Gesetzes.
Das Gesetz des Demeter die Verwendung von mehreren Punkten abschreckt, wenn jeder Punkt das Ergebnis eines anderen Objekt darstellt, zB:
- erster Punkt ist eine Methode aus ObjectA genannt, ein Objekt vom Typ zurückkehr ObjectB
- Nächster Punkt ist ein Verfahren nur in ObjectB verfügbar, ein Objekt vom Typ Rückkehr ObjectC
- nächster Punkt eine Eigenschaft ist nur in ObjectC
- ad infinitum
jedoch zumindest meiner Meinung nach ist das Gesetz von Demeter nicht, wenn das Rückgabeobjekt eines jeden Punktes verletzt noch der gleiche Typ wie der ursprünglichen Anrufer ist:
var List<SomeObj> list = new List<SomeObj>();
//initialize data here
return list.FindAll(i => i == someValue).Sort(i1, i2 => i2 > i1).ToArray();
In dem obigen Beispiel beid FindAll () und Sort() geben denselben Objekttyp wie die ursprüngliche Liste zurück. Das Gesetz von Demeter wird nicht verletzt: Die Liste sprach nur mit seinen unmittelbaren Freunden.
Das sagte nicht alle fließenden Schnittstellen verletzen das Gesetz der Demeter, so lange sie den gleichen Typ wie ihre Anrufer zurückgeben.
Man könnte argumentieren, dass eine fließende Schnittstelle nicht gegen das Demeter-Gesetz verstößt, weil man nur auf das gleiche Objekt in einer Punktkette zugreift. – MSN
Eine zweite Möglichkeit, dies zu betrachten, besteht darin, dass eine fließende Schnittstelle einfach eine alternative, kompakte Art ist, sequenzierte Operationen so durchzuführen, dass eine Zustandsveränderung abstrahiert wird, da die Ergebnisse jedes Zwischenschritts implizit sind. –