Erstellt eure eigene PHP Bibliothek
Diesmal ein wenig später am Tag, aber da ihr Samstags auch nicht so früh aufstehen werdet, denke ich doch mal, dass es ok ist. Heute geht es eher im einen kleinen Rat, den ich euch mitgeben will. Naja zumindest denen, die noch nicht so lange im PHP-Geschäft sind. Legt euch eure eigene PHP Bibliothek an. Sobald ihr euch eine Methode schreibt, die nicht domänenspezifisch ist, also nicht nur im Kontext eurer Anwendung eine Rolle spielt, solltet ihr diese separiert behandeln. Habt ihr zum Beispiel Tool, das ein Kreuzworträtsel erstellt, in dem ihr eine Methode benötigt, die einen String rekursiv ausgibt, dann solltet ihr diese Methode nicht fest in euer Projekt integrieren, sondern lose gekoppelt in eure Bibliothek werfen. In meinem Fall würde dies dann so aussehen:
class Base_String { /** * Some documentation * @param String $string * @return string */ public static function recursive( $string ) { // ... } }
Nur so kann ich sicherstellen, dass ich das Rad nicht zwei mal erfinden muss. Oder kennt ihr das Gefühl etwa nicht, dass man in einen früheren Projekt schon mal etwas programmiert hat, das man jetzt gut gebrauchen könnte, aber man diese Stelle nicht mehr findet oder sie viel zu speziell verfasst hat. Dieser Ansatz sollte dies umgehen. Und ihr werdet sehen, wie schnell sich so eine Bibliothek aufbauen lässt.
Als wichtigen Merksatz solltet ihr noch beachten, dass keine dieser Klassen eine Abhängigkeit in euer Projekt besitzen darf. Alle Abhängigkeiten beziehen sich nur auf die Bibliothek selber. Achtet auch drauf, dass ihr eine gute Dokumentation verfasst, denn wer weiss, ob ihr in ein paar Wochen eure Gedanken von früher wieder zusammen bekommt.
Wenn man das Rad nicht neu erfinden will, sollte man sich auch die großen Frameworks ansehen und sich eins davon aussuchen. Meiner Meinung nach ist ZF ja schon der Platzhirsch geworden. Aber je nach Geschmack, Paradigma und Stil kann man sich – natürlich – auch für ein anderes entscheiden.
Auch in Sachen „Aufbau einer Bibliothek“ kann man da noch so einiges lernen.
Ein Framework ist natürlich grundsätzlich nicht schlecht und Zend Framework auch mein persönlicher Favorit, aber nichtsdestotrotz wird man für sich selber immer wieder speziellere Sachen brauchen, die ein Framework nicht abdecken kann.
Vielfach wird hier ja lieber auf Copy & Paste zurückgegriffen anstatt sich eine eigene Bibliothek aufzubauen.
Man kann ja auch durchaus mehrere Bibliotheken (inkl eigener) nebeneinander betreiben.
Irgendwie finde ich es komisch, dass im Bereich PHP, die Begriffe Framework und (Komponenten-)Bibliotheken irgendwie vermischt wurden.
@Nils ich denke diese Vermischung ist nicht zuletzt PEAR geschuldet, welches sich als Framework bezeichnet, obwohl es das eindeutig nicht ist, sondern „nur“ ein Repository mit verschiedenen Bibliotheken.
Andererseits unterteilen sich Frameworks in mehrere Kategorien. Die meisten verstehen unter „Framework“ immer „Application Framework“ – das ist jedoch nur eine von vielen Subkategorien.
Es gibt durchaus auch „Component Frameworks“. Diese verlangen jedoch eigentlich, dass die „Components“ sich an die Definition einer Komponente halten, was bei PEAR jedoch nicht der Fall ist. Komponenten verlangen eine klare Kapselung, welche den PEAR-Bibliotheken einfach fehlt.
In dieser Reihe würde ich aber ganz klar Lösungen wie SWING sehen. Die SWING-Komponenten bilden insgesamt ein „Component Framework“.
Das Bibliotheken und Component Frameworks eine gewisse Verwandtschaft haben liegt in der Natur der Sache. Der Unterschied ist, dass Bibliotheken nicht die Definition einer Komponente erfüllen.
Den Tipp beherzige ich auch schon eine Weile, was mir allerdings fehlt ist ein vernünftiges Programm was meine Bibliothek verwaltet. Denn sonst sitze ich beim nächsten Mal „String rekursiv ausgeben“ vor meinem Projekteordner und weiß das ich das irgendwo toll gekapselt habe, aber wo…
Wie sieht da deine Lösung aus? Auch im Hinblick auf Dokumentation und Versionisierung.
@paul
Namespaces und phpDocumentor sollten dir helfen.