Der gelegentlich nützliche Ratschlag von Demeter

Tags:

Kennt ihr das Gesetz von Demeter (law of demeter)? Das war natürlich eine rhetorische Frage, denn ich werde jetzt sowieso erklären, was dieses "Gesetz" ist. Ha!

Das Gesetz von Demeter ist eine Richtlinie, die dabei helfen soll, dass Objekte in der objektorientierten Programmierung möglichst wenige Abhängigkeiten haben. Sein Ziel will es damit erreichen, indem es Objekte nur mit seinen unmittelbaren Nachbarn kommunizieren lässt.

Eine Methoden (M) eines Objekt (O) soll nur kommunizieren mit ...

Hier das Wikipedia-Beispiel:

<?php
class Beine
{
    public function bewegen()
    {
        /* ... */
    }
}

class Hund
{
    private $beine;

    public function __construct(Beine $beine)
    {
        $this->beine = $beine
    }

    public function gibBeine()
    {
        return $this->beine;
    }
}

class Herrchen
{
    public function gassiGehen(Hund $hund)
    {
        $hund->gibBeine()->bewegen();
    }
}

$hund = new Hund(new Beine);
$herrchen = new Herrchen();
$herrchen->gassiGehen($hund);

Die Zeile, die gegen das Gesetz von Demeter verstösst, ist ...

$hund->gibBeine()->bewegen();

Das Objekt der Herrchen Klasse greift hier auf ein Objekt der Klasse Beine zu, obwohl dieses kein direkter Nachbar ist. Der direkte Nachbar ist das Objekte der Klasse Hund. Um den Code "gesetzestreu" zu machen, müsste man eine Wrapper-Methode in der Hund-Klasse einbauen. Schliesslich weiss der Hund ja auch selber, wie er laufen kann.

<?php
class Beine
{
    // ...
}

class Hund
{
    // ...

    public function gehen()
    {
        $this->beine->bewegen();
    }
}

class Herrchen
{
    public function gassiGehen(Hund $hund)
    {
        $hund->gehen();
    }
}

// ...

Klingt doch eigentlich nach einer ganz guten Idee, oder? Ja, aber natürlich entsteht dadurch auch einiges an zusätzlichem Code. Schlussendlich kann sogar die Übersichtlichkeit leiden. Man muss sich also stets überlegen, ob das Gesetz von Demeter bei einer Situation wirklich hilft - oder eher nicht. In den meisten Fällen könnte man die Kopplung seiner Objekte aber sicherlich verkleinern, wenn man etwas öfters an die olle Göttin denken würde.

Und was meinst du dazu, Martin Fowler?

Law of Demeter

Genau.

Ähnliche Artikel

Kommentare