Das Gesetz von Demeter besagt Folgendes:
- Jede Einheit sollte nur begrenzte Kenntnisse über andere Einheiten haben: nur Einheiten, die "eng" mit der aktuellen Einheit verbunden sind.
- Jede Einheit sollte nur mit ihren Freunden sprechen. Sprich nicht mit Fremden.
- Sprechen Sie nur mit Ihren direkten Freunden.
In C # 6.0 wurde ein neuer Operator eingeführt, der als nullbedingter Operator bezeichnet wird . IMHO erleichtert es die Codierung und verbessert die Lesbarkeit. Aber es macht es auch einfacher, mehr gekoppelten Code zu schreiben, da es einfacher ist, durch Klassenfelder zu navigieren, die bereits auf NULL prüfen (so etwas wie var x = A?.B?.C?.D?.E?.F?
).
Stimmt es, dass dieser neue Betreiber gegen das Gesetz von Demeter verstößt?
X.Y.Z.W.U
gegen das "Gesetz" verstößt. Aber meiner Erfahrung nach ist Code in 90% der Fälle einfach nur hässlich gekoppelter Code.
.?
verstößt nicht mehr gegen das LoD als +
oder -
.
A?.B?.C?.D?.E?.F?
dies gegen die Regeln verstoßen würde? Bei LoD geht es nicht darum, wie viele Punkte es gibt, und wenn die aufrufende Methode solche Informationen über die Struktur enthält, die nicht gegen ihre Punkte verstößt , wäre ein solcher Aufruf durchaus akzeptabel. Dass ein solcher Code könnte LoD verletzen ist nicht genug , um zu sagen , dass alle Verwendungen es tun verletzen LoD.