Sven Rautenberg: größeres Projekt in PHP mit OOP

Beitrag lesen

Moin!

Nur sind das meist recht simple Beispiele mit ein paar Zeilen Code, und ich frage mich nun: wie geht man ein größeres Projekt mit OOP an? Also z.B. eine Web-Applikation mit Registrierung, Log in, User-Bereich, Artikel verfassen, Kommentieren usw.?

Indem man zuerst die kleinsten Aufgaben und Dinge mit thematisch eng begrenzten Objekten erfüllt, um dann neue, darauf aufbauende Aufgaben mit weiteren Objekten zu erledigen, die die ersten Objekte benutzen, und so weiter.

$meineKillerApplikation = new KillerApplikation();

Das ist die falsche Denkweise.

In der Regel hast du Objekte für die absoluten "Basics".

Diese "Basics" zerfallen in zwei grundsätzlich unterschiedliche Teile: Erstens Objekte, die mit der "Außenwelt" kommunizieren, und zweitens Objekte, die komplett für sich alleine stehen und ohne Außenwelt funktionieren.

Diese Unterscheidung ist vor allem wichtig, wenn man den Entwicklungsansatz "test driven design" verfolgt: Man schreibt zuerst für jedes Objekt und dessen Methoden, die entstehen sollen, mindestens einen Test, der erst dann erfolgreich durchlaufen wird, wenn man das Objekt korrekt programmiert hat. Das bedeutet für Objekte, die mit der Außenwelt kommunizieren, einen deutlich größeren Aufwand, weil der Test vorher die korrekte Simulation der Außenwelt herstellen muß, und hinterher alles wieder aufräumen.

Beispiel: Wenn ein Objekt aus einer Datei lesen soll, dann wird der Test vorher eine Datei mit einem beliebigen Dateinamen anlegen und etwas reinschreiben müssen und diesen Namen dann dem Objekt übergeben, damit hinterher geprüft werden kann, ob die Datei korrekt gelesen wurde. Und damit sich solche Dateien nicht endlos ansammeln und stören, muß die Datei hinterher auch wieder gelöscht werden.

In diesem Zusammenhang sehr empfehlenswert: http://www.lastcraft.com/first_test_tutorial.php sowie http://www.lastcraft.com/simple_test.php.

Nun hat sich mein Hauptprogramm kaum geändert und ich habe eine riesige unübersichtliche Klasse mit unzähligen Methoden, die vorher in einzelnen Dateien untergebracht waren.

Das liegt an deinem Denkansatz, zuerst ein riesiges Objekt zu bauen, in dem "irgendwas" passiert.

Hilfreich wäre es, sich mal ein "elegant" und O. o. programmiertes Skript anschauen zu können. Ein paar bekannte wie phpBB oder Wordpress habe ich mir bereits angeschaut - eleganter OOP-Code ist das aber nicht gerade... Kennt jemand ein gut programmiertes größeres Skript?

Ich glaube kaum, dass wirklich GROSSE Projekte dir hinsichtlich eines OOP-Ansatzes weiterhelfen werden, da du ja dort nur die fertigen Resultate siehst, aber nicht die Idee, die dahintersteckt und begründet, warum die Einzelteile so sind, wie sie sind.

In OOP kommen viele, oft sehr unterschiedliche, Einzelteile vor. Typisch wäre beispielsweise:

a) eine Kapselklasse für die klassischen mysql_*-Funktionen (braucht man ab PHP 5 mit mysqli nicht mehr, bzw. löst es anders).
b) eine Klasse für den Mailversand
c) eine Klasse fürs Loggen (siehe als exzellentes Beispiel das Tutorial oben)
d) Klassen für Datenobjekte (funktioniert elegant mit mysqli)

Es gehört zum OOP unbedingt dazu, sich auch mit Designpattern auseinanderzusetzen. Patterns, die sehr häufig vorkommen, sind z.B. das Singleton-Pattern oder das Factory-Pattern.

- Sven Rautenberg

--
"Love your nation - respect the others."