Wiederverwendbare Framework Erweiterungen


Freitag 01.Juni.2012, 9:33 von Mario

Auch wenn es gestern Abend in dem Vortrag von Pierre Minnieur bei der Symfony Usergroup Hamburg im wesentlichen um das Thema „Bundles are not Plugins“ ging, hab ich dort für mich einen ganz anderen Aspekt mitgenommen, der meiner Meinung nach häufig von Entwicklern vergessen wird, die sich im wesentlichen in einer Frameworkwelt, sei es Symfony, Zend, Flow3 oder was auch immer, bewegen.

Routiniert packt man seine Funktionen in z.B. Symfony Bundles, nutzt die dort vorgegeben Methoden der Vererbung, Strukturierung, etc. und verwendet bestenfalls diese Bundles sogar in mehr als einem Projekt. Bis hier hin eine schöne Welt! Aber was passiert, wenn ich wesentliche Funktionalitäten aus meinem Bundle nun in einem Zend Projekt verwenden will?

Man merkt, eigentlich haben wesentliche Codebestandteile aber so gar nichts in einem Bundle zu suchen, sondern sind für eine gute Wiederverwendung viel besser in einer eigenständigen Library aufgehoben. Nun ist lediglich ein schlanker „Wrapper“, im Falle Symfony ein Bundle, nötig, welches die Funktionalität der Library in den Kontext des Frameworks hebt. Der Code, der sich an ein spezielles Framework bindet, ist deutlich reduziert und die Library wird hoffentlich häufiger wiederverwendet, da diese mit geringem Aufwand auch in anderen Frameworks einfach eingebunden werden kann.

Wesentlicher Grund gegen so ein Vorgehen mag in der Vergangenheit das Fehlen, bzw. die fehlende Akzeptanz von Werkzeugen wie Composer gewesen sein. Mit Composer und Packagist scheint sich in der PHP Welt so langsam eine Entsprechung von Maven und Apache Commons durchzusetzen, so dass zu hoffen bleibt, dass wir bald alle einfach und schnell tolle Libraries in unseren Lieblingsframeworks benutzen können.

urlino.com – ein Beispiel für das Zend Framework


Montag 08.Juni.2009, 11:53 von Mario

Da ich in der letzten Zeit recht viel mit dem PHP Framework Zend Framework herumgespielt hab, will ich den geneigten Leser an meinen Erfahrungen teilhaben lassen, auch wenn im Zuge des allgemeinen (PHP-)Framework Hypes wahrscheinlich schon mehr unnützes als informatives dazu geschrieben wurde. Da jeder halbwegs erfahrene PHP Entwickler sich sicherlich schon mit dem einen oder anderen Framework beschäftigt hat, spar ich mir mal die einleitenden Worte wie: Was ist ein Framework, warum muss ich das haben und, und, und ….

Ohne das ich ein PHP Framework Guru bin, der sie alle schon gesehen hat: Was mir bei ersten Arbeiten mit ZF aufgefallen ist: Im Vergleich zu Symfony, einem anderen im Moment mächtig gehypten PHP Framework, ist der Einstieg in ZF wesentlich intuitiver, es gibt nur wenige Arbeitsschritte zu tun, um eine Minimalapplikation zum Laufen zu bringen, die dann wirklich auch minimal ist. Bei meinem ersten Gehversuchen mit Symfony hatte ich zumindest das Gefühl, das da doch ein Menge Code durch das symfony commandline tool generiert wird, den man im Prinzip anschließend komplett entsorgen kann. ZF geht da gefühlt wesentlich übersichtlicher zu Werke, was aber auch mit einer gewissen Lernkurve meinerseits im Umgang mit solchen Frameworks zu tun haben kann.

Da ein bischen Code mehr sagt wie 1000 Worte findet sich eine Beispielapplikation im  svn Repository unter http://svn2.xp-dev.com/svn/majo-urlino/trunk/. Bei der Appliktion handelt es sich um einen simplen kurzurl-Dienst ala tinyurl.com. Die Applikation in Aktion kann unter http://www.urlino.com begutachten. An sich ist die Applikation nicht weiter spannend, allerdings greift das Beispiel ein paar klassische Probleme wie Internationalisierung, Einbindung eines Javascript Frameworks(in diesem Falle Dojo) und den Aufbau einer Struktur für eigene Erweiterungen des Frameworks auf.

Um die Anwendung in der eigene Entwicklungsumgebung laufen zu lassen, sollte man sich eine frische MySql  Datenbank mit dem name zf und einen user zf mit dem passwort zf auf localhost einrichten(Konfiguration in ./application/configs/application_localhost.ini). Im Verzeichnis ./resources/sql befindet sich die Datei setup.sql mit dem nötigen sql für die Initialisierung der Datenbank. Zusätzlich hab ich auch meine Eclipse Project Datei eingecheckt, so das man sich die Applikation direkt mit Eclipse aus dem Repository auschecken kann.

Viel Spaß beim ausprobieren und ich freue mich auf Anmerkungen, Fragen und Verbesserungsvorschläge.