Frage

Die LOD Beschreibung I (zum Beispiel gesehen haben, Wikipedia , C2 Wiki ) sprechen über diese Methoden nicht aufrufen. Zu zitieren Wikipedia:

Das Gesetz des Demeter für Funktionen erfordert, dass ein Verfahren M eines Objekt O kann nur invoke die Methoden der folgenden Arten von Objekten:
- O selbst
- M-Parameter
- Alle Objekte, erstellt / instanziiert innerhalb M
- direkte Komponente A-Objekte
- eine globale Variable, mit dem O, im Rahmen von M

Aber was über den Zugriff auf Eigenschaften, Variablen oder Aufzählungen? Zum Beispiel, da diese:

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";
}

Sind irgendwelche / all dieser LOD Verletzungen? (Ignorieren Sie den Direktvariablenzugriff für jetzt, 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;
}

Ich würde die ersten beiden nicht (ob ‚offizielle‘ Verletzungen oder auch nicht), nicht ganz so sicher über die Enum though.

War es hilfreich?

Lösung

Ich kann nicht auf der Enum Frage beantworten. - Ich zu erinnern scheint, dass die Standard-Empfehlung nicht ist Aufzählungen innerhalb einer Klasse zu definieren

Eigenschaften können Sie wirklich Eigenschaften betrachten Verknüpfungen zu Methoden (getProperty() und setProperty(value)) zu sein. In diesem Fall ist die Antwort, dass die Eigenschaft Zugriffe sind Verletzungen.

Für Felder (Variablen), noch einmal, gängige Praxis nicht ist, sie zu entlarven, sondern Eigenschaften zu verwenden, wirklich Felder auszusetzen ist eine Verletzung der Verkapselung.

Letztlich aber die Absicht des Gesetzes von Demeter ist das Wissen der Umsetzung zwischen den Klassen zu begrenzen. Für mich ist das Mittel alle Ihre Beispiele sind Verletzungen.

Andere Tipps

FWIW ...

Verstoß # 1 (x) sieht aus wie ein rauer Service Lage Muster, so würde ich vermuten, dass das Beispiel nicht eine Verletzung ist.

Verstoß # 2 (y) sieht aus wie ein Klasse-Design Geruch, aber in der Regel nicht nachweisen, etwas über das, was Verletzung # 1 zeigt.

Ich glaube nicht, dass die öffentlichen Aufzählungen (z), aber sie scoped werden, würde hier gegen LOD zählen.

Haben Sie ein besseren reale Welt Beispiel Ihre Anliegen zu demonstrieren? Ohne richtigen Kontext, einfache Codebeispiele in Ordnung sein könnten, oder sie könnten Design-Prinzipien verletzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top