Daniel Thoma: Programmiertechnik: Grosse Klassen verwalten

Beitrag lesen

Hallo TobiasBuschi,

  1. Ich lass die Klasse gross werden, und teile einfach die Methoden in gruppen auf

Wenn es sein muss, kann eine Klasse schon mal ein paar Zeilen mehr haben.

  1. Ich Vererbe, und füge so immer mehr Funktionalität hinzu bis ich eine vollumfängliche Klasse habe die ich schlussendlich verwende.
    class x_prototype{}
    class x_add_kriechen extends x_prototype()
    class x_add_laufen extends x_add_kriechen()
    class x_add_fliegen extends x_add_laufen()
    class x_add_schwimmen extends x_add_fliegen{}
    -> class x extends x_add_schwimmen{}

Wah alles nur das nicht.
Vererbung sollte man sehr überlegt einsetzen. Gigantische Vererbungshierarchien sind meist undurchsichtig und unflexibel.
Außerdem solltest Du Vererbung einsetzen, um eine Struktur abzubilden, nicht um einfach irgend welchen Code zu einer Datei zusammenzufügen.

  1. Ich erstelle viele kleine Klassen, die ich in einer grossen als Objekte vereine.

Sehr komplizierte Algorithmen in eine extra Klasse auszulagern ist eine gängige Methode.
Man kann z.B. ein eine Schnittstelle (gibt es das in PHP) oder eine abstrakte Klasse definieren, die das Grundgerüst des Algorithmus beinhaltet und davon konkrete Implementierungen ableiten.
Die Klasse, die die funktionalität benötigt Greift dann auf (austauschbare) implementierungen zurück.
Dieser Aufwand lohnt sich aber nur, wenn man diese flexibilität auch wirklich benötigt.

  1. sonst wie?

Wenn Deine Methoden sehr lang sind, wobei sehr lang etwas zwischen mehr als 20 bis 200 Zeilen bedeutet, je nach Problem und persönlicher Ansicht, gibt es vermutlich Teilprobleme, die man Ausglieder könnte. Zumindest mal in eigene Methode evt auch in andere Klassen.
Möglicherweise entdeckst Du dabei auch, das Du an einigen Stellen gleiche oder sehr ähnliche Dinge doppelt implementiert hast, die sich irgendwie zusammenfassen lassen.

Wenn eine Klasse sehr viel und/oder sehr komplizierten Code enthält, kann das ein Indiz dafür sein, dass man da irgend etwas falsch gemacht hat. Das sollte aber nicht anlass dafür sein, den Code jetzt halt irgendwie auseinander zu Pflücken, sondern man sollte sich gründlich überlegen, warum das denn so kompliziert ist und wie man das Problem vielleicht geschickter angehen oder strukturieren kann, sodass sich das vereinfachen lässt.
Das Problem muss ja gar nicht unmittelbar in der Klasse sein. Vielleicht hat man eine Datenstruktur o.ä., die die Klasse verwendet, völlig falsch aufgezogen und muss dort deswegen jede Menge unnötiger Akrobatik betreiben.

Grüße

Daniel