Programmiertechnik: Grosse Klassen verwalten
TobiasBuschi
- php
1 Dennis0 Fabian St.0 dedlfix1 Daniel Thoma
Hallo allerseits
Wie organisiere ich grosse PHP-Klassen am beste?
1. Ich lass die Klasse gross werden, und teile einfach die Methoden in gruppen auf
2. 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{}
3. Ich erstelle viele kleine Klassen, die ich in einer grossen als Objekte vereine.
class kriechen()
class laufen()
class fliegen()
class schwimmen{}
class x{
function __construct(){
$o_kriechen = new kriechen();
$o_laufen = new laufen();
$o_fliegen = new fliegen();
$o_schwimmen = new schwimmen();
}
}
4. sonst wie?
Natürlich ist es von Fall zu Fall unterschiedlich, in meinem Fall findet vor allem Punkt 1 und Punkt 3 Verwendung.
Ich bin mir jetzt am überlegen ob ich Punkt 3 noch hinzufügen soll, damit die Klasse übersichtlicher wird.
mfg Tobias Buschor
Hi TobiasBuschi,
- Ich lass die Klasse gross werden, und teile einfach die Methoden in gruppen auf
Diese Methode fände ich jetzt erst mal nicht schlecht - allerdings sollte man Bedenken, dass hier ein Arbeiten von mehreren Leuten an einem Projekt eher schwer fällt. Bei mehreren Dateien (bzw. Klassen) kann jeder an einer Sache arbeiten und am Ende wird die Teile schön modul-artig zu einem Ganzen zusammen genommen.
- Ich Vererbe, und füge so immer mehr Funktionalität hinzu bis ich eine vollumfängliche Klasse habe die ich schlussendlich verwende.
Das ich IHMO am besten, weil dies auch beliebig erweiterbar ist - ebenso fällt hier eine Arbeitsteilung leicher.
- Ich erstelle viele kleine Klassen, die ich in einer grossen als Objekte vereine.
Das gefällt mir irgendwie überhaupt nicht - wirtk so "unsauber" ;-)
Natürlich ist es von Fall zu Fall unterschiedlich, in meinem Fall findet vor allem Punkt 1 und Punkt 3 Verwendung.
Ich bin mir jetzt am überlegen ob ich Punkt 3 noch hinzufügen soll, damit die Klasse übersichtlicher wird.
Hier widersprichst du dir irgendwie - du meinst wohl, bei dir finden Punkt 1 und 2 Anwendung?
MfG, Dennis.
Danke für die Antwort
Ich bin mir jetzt am überlegen ob ich Punkt 3 noch hinzufügen soll, damit die Klasse übersichtlicher wird.
Entschuldigung
Punkt 2 meinte ich
Hi!
Wie organisiere ich grosse PHP-Klassen am beste?
2. 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{}
Auch ich tendiere - wie Dennis - klar zur zweiten Methode, da du dir damit eben ein Vorteil des Objektmodells (nämlich die Möglichkeit, Eigenschaften und Methoden von einer allgemeinen Klasse auf eine spezielle zu übertragen und u.U. diese auch zu erweitern) zu Nutze machst.
Grüße,
Fabian St.
echo $begrüßung;
Wie organisiere ich grosse PHP-Klassen am beste?
Natürlich ist es von Fall zu Fall unterschiedlich ...
Eben. Es gibt kein pauschales "am besten". Es gibt nur verschiedene Vorgehensweisen, die für jeden Einsatzfall auf Zweckmäßigkeit geprüft werden müssen.
- sonst wie?
echo "$verabschiedung $name";
Hallo TobiasBuschi,
- 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.
- 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.
- 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.
- 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