Nun ich habe ausgelernt, mir wurde alles nur mögliche Wissen vermittelt und ich bin nun bereit dieses ohne Rücksicht auf zukünftige Entwicklungen aufzunehmen. Gut ok, nicht wirklich ;) Jedenfalls bin ich bei fairnet (meinem neuen Arbeitgeber) damit beschäftigt ein komplexes Shopsystem in PHP zu konzipieren.

Dabei soll das System möglichst leicht erweiterbar und Objektorientiert konzipiert sein. Ersteres versteht sich von selbst und letzteres sollte ja eigentlich ersteres begünstigen. Nun ist es so das es für JAVA und auch C++ CASE-Tools wie Sand am Meer gibt, PHP aber doch eher die kleine Skriptsprache ist. Ich habe zwar schon einiges von der verbesserten OO-Implementierung der Zend Engine 2 gehört, allerdings noch keine Zeit gehabt mich näher damit zu beschäftigen. Nun, jetzt hatte ich sie und kam zu dem Entschluß der Idee meines Kollegen zu folgen und nach einem CASE-Tool für PHP ausschau zu halten.

Leider erstmal ohne Erfolg, die einzigen Tools die ordentliches Round-Trip-Engeneering bieten sind jedoch teuer und Closed Source. Erfreulicherweise haben sich aber im Team von ArgoUML einige Leute gefunden, welche ein Plugin für PHP, C++ und C# geschrieben haben. Dieses erlaubt einen Export von Klassendiagrammen in die o.g. Sprachen und auch ein nachträgliches bearbeiten in der Entwurfsansicht.

Dabei greift ArgoUML auf einen einfachen Trick zurück, der gesamte Nutzercode wird zwischen Kommentare geschrieben und bei einer Veränderung der Klassenstruktur nicht angetastet. Das ganze funnktioniert dabei so gut, dass ich es wohl nicht nur für das eine Projekt verwenden werde, so habe ich schon angefangen die Template Bibliothek zu redesignen und PHP5 / 4 tauglich zu machen.

Der generierte Code von ArgoUML ist sehr sauber und enthält direkt Kommentare im PHPDoc / JAVADoc Format, welche auch zu Doxygen kompatibel sein sollten. Durch den Export aus ArgoUML kann man auch sehr schön die Unterschiede zwischen den OO-Modellen von PHP 4 & 5 ersehen. Hatte PHP 4 noch nicht einmal Datenkapselung, geschweige denn Vererbungsabstraktion gibt es all das in PHP 5, so dass man beispielsweise seine Objekte auch nach dem Singleton Entwurfsmuster gestalten kann.