Rolf b: spagetticode in methoden strukturieren & ordnen

Beitrag lesen

(Wasn das für ne Programmiersprache? Sieht aus wie eine Klasse mit Konstruktor, aber ein Konstruktor darf nichts zurückgeben. Zumindest nicht in Java oder PHP...)

Zum einen kannst Du der Netzbohne sagen, ab wievielen Zeilen sie meckern soll.

Zum anderen finde ich ein Zeilenlimit wenig geeignet, um eine Methode als "schlecht strukturiert" zu brandmarken. Manchmal muss man eben stumpf was runterprogrammieren, z.B. 17 Parameter an ein SQL Statement binden, und dann wird das Ding nun mal was länger. Da fehlt der Netzbohne etwas, das ich am Resharper schätze: Eine Direktive namens "Halt HIER mal die Klappe".

Das Kriterium für den Schnitt von Methoden heißt: Do One Thing. Eine Methode soll eine Aufgabe lösen. In „Clean Code“ erzählt Robert C. Martin die folgende Anekdote. Ich habe das Buch in meinem Kindle, und da geht kein Cut+Paste als Text, daher snippe ich es als Bild heraus...

How short should your functions be?

Ich kann das Buch nur empfehlen. Allerdings muss man auch immer den Trade-Off im Auge behalten: Funktionsaufrufe kosten Zeit. Ein guter Compiler kann durch Inlining viel optimieren, aber nicht jede Sprache hat so etwas.

Manchmal ist es auch sinnvoll, eine Methode in eine eigene Klasse auszulagern. Wenn man eine Methode programmiert, die immer länger wird, und man ggf. noch Helperfunktionen aufruft, die 8 Parameter brauchen - dann ist das ein untrügliches Zeichen für einen Worker. Den erzeugt man und ruft darin eine Methode auf, die den Job erledigt. Statt wilden Parameterübergaben zu Helpern kann der Worker Instanzvariablen verwenden. Und das schöne ist: Du kannst ihn autark Unit-Testen. Du kannst ihn vielleicht auch in der nutzenden Klasse durch einen Mock ersetzen und damit die Tests dieser Klasse vereinfachen.

Rolf