Entmystifizierung des Demeter-Gesetzes

Das Demeter-Gesetz (oder das Prinzip des geringsten Wissens) ist eine Entwurfsrichtlinie für die Entwicklung von Softwareanwendungen. Dieses Prinzip wurde erstmals 1987 an der Northeastern University diskutiert und besagt, dass ein Objekt niemals die internen Details anderer Objekte kennen sollte. Es wurde entwickelt, um die lose Kopplung in Software-Designs zu fördern.

Beachten Sie, dass die Kopplung definiert werden kann als der Grad der gegenseitigen Abhängigkeit zwischen Softwaremodulen und wie eng diese Module miteinander verbunden sind. Je stärker die Kopplung zwischen den Komponenten in einer Anwendung ist, desto schwieriger wird es, sie im Laufe der Zeit zu ändern und zu warten. Es ist immer eine gute Praxis, Systeme zu entwerfen, die einfacher zu testen und zu warten sind, indem sichergestellt wird, dass die Komponenten in einer Anwendung lose miteinander verbunden sind. Mehr über Zusammenhalt und Kopplung erfahren Sie in meinem Artikel hier.

Das Gesetz des Demeter-Prinzips verstehen

Das Demeter-Prinzip besagt, dass ein Modul nicht über die inneren Details der Objekte verfügen sollte, die es manipuliert. Mit anderen Worten, eine Softwarekomponente oder ein Objekt sollte nicht über die interne Funktionsweise anderer Objekte oder Komponenten verfügen. Lassen Sie uns das Gesetz von Demeter anhand eines Beispiels verstehen.

Betrachten Sie drei Klassen, nämlich - A, B und C - und Objekte dieser Klassen - objA, objB bzw. objC. Nehmen wir nun an, objA ist abhängig von objB, das wiederum objC zusammensetzt. In diesem Szenario kann objA Methoden und Eigenschaften von objB aufrufen, nicht jedoch von objC.

Das Gesetz des Demeter-Prinzips nutzt die Kapselung, um diese Isolation zu erreichen und die Kopplung zwischen den Komponenten Ihrer Anwendung zu verringern. Dies trägt zur Verbesserung der Codequalität bei und fördert die Flexibilität und die einfachere Wartung des Codes. Die Einhaltung des Demeter-Gesetzes hat den Vorteil, dass Sie Software erstellen können, die leicht zu warten und an zukünftige Änderungen anzupassen ist.

Stellen Sie sich eine Klasse C mit einer Methode M vor. Angenommen, Sie haben eine Instanz der Klasse C mit dem Namen O erstellt. Das Demeter-Gesetz gibt an, dass die Methode M die folgenden Typen von. Aufrufen kann, oder dass eine Eigenschaft einer Klasse den folgenden Typ aufrufen soll Nur für Mitglieder:

  • Das gleiche Objekt, dh das Objekt "O" selbst
  • Objekte, die als Argument an die Methode „M“ übergeben wurden
  • Lokale Objekte, dh Objekte, die innerhalb der Methode „M“ erstellt wurden
  • Globale Objekte, auf die das Objekt "O" zugreifen kann
  • Direkte Komponentenobjekte des Objekts "O"

Hier ist eine Codeliste, die eine Klasse und ihre Mitglieder veranschaulicht, die sich an das Demeter-Gesetz halten. Ich habe Kommentare erwähnt, wo immer dies aus Gründen der Klarheit zutreffend ist.

public class LawOfDemeterExample

    {

        //This is an instance in the class scope

        //and hence this instance can be accessed by any members of this class

        AnotherClass instance = new AnotherClass();

       public void SampleMethodFollowingLoD(Test obj)

        {         

            DoNothing(); //This is a valid call as you are calling a method of the same class

             object data = obj.GetData(); //This is also valid since you are calling a method

            //on an instance that has been passed as a parameter           

             int result = instance.GetResult();  //This is also a valid call as you are calling

            //a method on an instance locally created

        }

        private void DoNothing()

        {

            // Write some code here

        }

    }

Hier sind die beiden anderen Klassen, die Sie zum Kompilieren des obigen Codes benötigen würden.

public class AnotherClass

    {

        public int GetResult()

        {

            return -1;

        }

    }

    public class Test

    {

        public object GetData()

        {

            return null;

        }

    }

Lesen Sie nun die oben gezeigte LawOfDemeterExample-Klasse. Der Code ist selbsterklärend. Sie fragen sich jetzt vielleicht, ob das Gesetz von Demeter nur für Methoden gilt. Die Antwort ist nein". Das Demeter-Prinzip gilt auch für Immobilien.

Verstöße gegen das Demeter-Prinzip

In dem zuvor erläuterten ersten Codebeispiel haben wir unsere Diskussion zu diesem Thema mit der Einhaltung des Demeter-Gesetzes begonnen. Lassen Sie uns verstehen, was passiert, wenn wir diesem Prinzip nicht folgen. Betrachten Sie dieses Codebeispiel.

var data = new A().GetObjectB().GetObjectC().GetData();

In diesem Beispiel muss der Client von den Klassen A, B und C abhängen. Mit anderen Worten, er ist an Instanzen der Klassen A, B und C gekoppelt. Wenn sich diese Klassen in Zukunft ändern, treten Probleme auf Sie setzen sich Änderungen aus, die in Zukunft in einer dieser Klassen auftreten können.