Die LOD-Beschreibung, die ich gesehen habe (zum Beispiel, Wikipedia , C2 Wiki ) über den Nicht-Aufruf von Methoden sprechen. Um Wikipedia zu zitieren:
Das Demeter-Gesetz für Funktionen besagt, dass eine Methode M eines Objekts O nur die Methoden aufzurufen der folgenden Arten von Objekten:
- O selbst
- M's Parameter
- alle innerhalb von M erstellten/instantiierten Objekte
- O's direkte Komponentenobjekte
- eine globale Variable, auf die O zugreifen kann, im Geltungsbereich von M
Aber was ist mit dem Zugriff auf Eigenschaften, Variablen oder Enums? Zum Beispiel, gegeben dies:
class FirstClass {
public SecondClass GetRelatedClass() {
return new SecondClass();
}
public enum InnerEnum {
Violated,
NotViolated
}
}
class SecondClass {
public int Property {get; set;}
public string _variable = "Danny Demeter";
}
Handelt es sich bei einigen/allen dieser Fälle um Verstöße gegen die Mindestnormen? (Ignorieren Sie den direkten Variablenzugriff vorerst, wenn Sie können )
void Violate(FirstClass first) {
SecondClass second = first.GetRelatedClass();
var x = second.Property;
var y = second._variable;
var z = FirstClass.InnerEnum.Violated;
}
Die ersten beiden würde ich nicht machen (egal ob "offizielle" Verstöße oder nicht), bei der Aufzählung bin ich mir nicht ganz so sicher.