5 Stimmen

Gilt das Gesetz der Demeter nur für Methoden?

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X