Named Constructor

oop clean code named constructor Um eine Methode leicht verständlich zu machen, gibt es viele Möglichkeiten. Man kann die Parameter benennen oder den Methodennamen selbst dazu nutzen. Hat man zwei Methoden, die fast das Selbe machen, dabei aber unterschiedlich Parameter erwarten, kann man dies anhand des Namens deutlich machen:

class Date
{
    public function setTimestamp($value)
    {
        // ...
    }

    public function setAtomFormattedDate($value)
    {
        // ...
    }

    public function setRssFormattedDate($value)
    {
        // ...
    }

    
    // ...
    
}

Was aber macht man, wenn man den Wert schon im Konstruktor übergeben will? PHP erlaubt nur einen Constructor. Klar, man könnte die Klasse selbst das Datumsformat erkennen lassen, wenn man sich das unbedingt antun möchte. Oft ist aber auch das nicht möglich, da die Parameter bei mehreren Varianten sinnvoll genutzt werden könnten.
Hier hilft ein Named Constructor. Im Grunde ersetzen wir den Constructor einfach durch statische Methoden, die wir ja in beliebiger Menge deklarieren und vor allem auch ganz nach unseren Wünschen benennen können.
Die Sichtbarkeit des Constructors ändern wir dann noch auf private, damit er von außerhalb nicht genutzt werden kann und unsere neuen Named Constructors genutzt werden müssen. Und schon ist unsere Klasse wieder ein Stück einfacher zu verstehen 🙂

class Date
{

    public static function fromTimestamp($value)
    {
        $instance = new Date();
        $instance->setTimestamp($value);
        return $instance;
    }

    public static function fromAtomFormattedDate($value)
    {
        $instance = new Date();
        $instance->setAtomFormattedDate($value);
        return $instance;
    }

    public static function fromRssFormattedDate($value)
    {        
        $instance = new Date();
        $instance->setRssFormattedDate($value);
        return $instance;
    }

    // named constructor
    private function __construct()
    {
    }
    
    // ...
}

59606e2d

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *