am 22. Juli 2009
Lange vermisst, aber heute ist es endlich wieder so weit. Ein kleines wtf des Tages. Da ich zur Zeit das Jobeet Tutorial des Symfony Frameworks durcharbeite (was übrigens ein toller Einstieg ist), sieht man jede Menge Code, der von den Sensio Labs Leuten. Wer glaubt, dass diese Experten immer alles richtig machen, dem will ich heute das Gegenteil beweisen. Wenn ich meinen gerade geschriebenen Text noch mal durchlese, dann glaube ich, dass ich eure Erwartungen an den “Fehler” ganz schön hochgechraubt habe.
Wollte ich aber eigentlich gar nicht, denn so schlimm ist der Fehler auch wieder nicht. Aber manchmal muss man ja auch übertreiben, wenn man mal so viele Leser wie die Bild Zeitung haben will. Was? Keine Zeitung mit der man sich messen will? Stimmt! Aber eigentlich wollte ich ja was anderes erzählen.
if ($this->getUser()->isFirstRequest())
{
$culture = $request->getPreferredCulture(array('en', 'fr'));
$this->getUser()->setCulture($culture);
$this->getUser()->isFirstRequest(false);
}
Das ist auch schon der Codeschnippsel um den es geht. Könnt ihr raten, was ich unschön finde? Einfach noch mal den Titel lesen. Die Methode isFirstRequest wird gleichzeitig als setter und getter verwendet. Finde ich sehr fies.
Eine Methode sollte genau eine Sache machen, so steht es überall geschrieben. Ist eine Methode ein Hybrid aus Setter und Getter, so kann es per Definition ja nicht nur eine Aufgabe haben. Wirklich intuitiv ist die Sache natürlich auch nicht, denn eine Methode, die als Frage formuliert ist, gibt in den meisten Fällen auch einen boolschen Wert zurück. Oder hättet ihr erwartet, dass diese Methode Werte gleichzeitig liest und setzt?
Nachdem ich das gesehen hatte, bin ich von meinem Schreibtisch wie ein wilder aufgesprungen, um mit einem Kollegen drüber zu reden, ob die symfony Jungs das immer so machen. Zum Glück war die Anwort NEIN. Scheint also eine Ausnahme zu sein. Vielleicht hat man einfach nur kurz nicht aufgepasst hat.
Das blöde an erfolgreichen Open Source Projekten ist, dass man, wenn man mal eine Version ausgerollt hat, schlecht die Interfaces wieder anpassen kann. Auch wenn die symfony Jungs wollten, könnten sie dieses unschöne Verhalten also nicht korrigieren.
Was ich aber eigentlich sagen wollte mit meinem Artikel ist nicht, dass alle bei sensioLabs doof sind und ich toll, sondern, dass man den Leitsatz verfolgen sollte, dass eine Methode genau eine Aufgabe erledigt. Versucht also nicht die eierlegende Wollmilchsau zu basteln und sie über Parameter anzusteuern. Macht lieber ein paar Methode mehr, dafür aber solche Methoden, die der Nutzer auch intuitiv benutzen kann.
Kleines Update: Schaut mal auf
KingCrunch, da wird das Thema weitergeführt.