In den letzten Jahren hatte sich das Zend Framework – unter den PHP Frameworks – schon nahezu etabliert. Der Branchenprimus gehört in den meisten Firmen die irgendetwas mit PHP zu tun haben wohl schon mehr oder minder zum Standard-Techset. Da macht sich auf einmal ein immer größer werdender Hype um die zweite Version des Symfony Frameworks bemerkbar. Die finale Version 2.0 wurde nach 12 Preview Releases, 5 Beta Versions und 6 Release Candidates am 28. Juli 2011 veröffentlicht. Die Fangemeinde wächst kontinuierlich.
Da kam am 20. Oktober des selben Jahres ein völliger Neuling ans Licht der Welt: FLOW3, ein mit Typo3 assoziiertes Framework. Und auch dieses bringt natürlich ein paar neue/alte Buzzwords mit. Doch was steckt dahinter?
Angefangen hat es in den Jahren 2006/2007. Damals hat der (architektur)technisch überholte Sourcecode des Typo3 Content-Management-Systems die Entwickler dazu gebracht über eine neue Version des CMS nachzudenken und auch umzusetzen. Nach neuen Konzepten und losgelöst von den Altlasten des Typo3 Systems wurde eine komplette Neuimplementierung begonnen: Bekannt unter dem Namen Phoenix. Als Fundament für die neue Architektur wurde eigens ein Framework entwickelt: FLOW3, das aktuell von einem Team aus elf Typo3-Core-Developern weiterentwicklelt wird. Die Koordination der Entwicklung und Herausgabe erfolgt von der Typo3 Association.
Was allerdings kaum einer weiß: FLOW3 wurde als Stand-Alone Framework entwickelt, d.h. dass es auch ohne Typo3, für eigenständige Applikationen, einsetzbar ist!
Folgende Grundprinzipien gelten als Highlights in FLOW3:
(Für weitergehende Informationen lohnt es sich die FLOW3-Webseite einmal genauer zu durchstöbern! Für den Anfang habe ich Links hinter die meisten Punkte angefügt, für diejenigen die es interessiert und die sich Weiteres dazu ansehen wollen.)
Model View Controller (MVC)
FLOW3 kommt in der MVC Architektur daher und folgt damit ebenso diesem Design Pattern wie die meisten modernen PHP-Frameworks. Damit wird eine modulare Trennung in die drei Schichten Datenmodell, Präsentation und Programmsteuerung ermöglicht.
Mehr dazu (aktuell noch in Arbeit)
Aspect-oriented Programming (AOP)
FLOW3 unterstützt wahrscheinlich als erstes PHP-Framework das aus der Java Umgebung bekannte AOP, das durch objektorientierte Programmierung umgesetzt werden kann. Es geht darum, generische Funktionalitäten über mehrere Klassen hinweg zu verwenden. Dazu müssen Regeln angegeben werden, damit dieser Code automatisch an den richtigen Stellen ausgeführt wird. Klassische Einsatzgebiete finden sich z.B. bei der Fehlerbehandlung oder dem Logging.
Mehr dazu
Domain-Driven Design (DDD)
FLOW3 ist eines der ersten Domain-Driven-Design Frameworks im PHP-Umfeld. Bei diesem Ansatz liegt der Fokus auf der Problemlösung. Die Entwicklung ist somit effizienter, weil technische Probleme im Hintergrund stehen und man an dem Wesentlichen, dem eigentlichen
Problem, arbeiten kann. DDD orientiert sich dabei an der agilen Softwareentwicklung.
Mehr dazu
Dependency Injection (DI)
Mit Hilfe dieses schon recht gängigen Entwurfsmusters wird für minimale Abhängigkeiten zwischen Komponenten bzw. Objekten gesorgt. Damit werden zum Beispiel auch Unit-Tests erleichtert, da unnötige Abhängigkeiten vermieden werden.
Mehr dazu
Continuous Integration (CI)
Mit diesem Prozess soll sichergestellt werden, dass möglichst jederzeit funktionierender Code existiert. Dies wird erreicht, indem so häufig wie möglich Einzelbausteine zusammengeführt und als großes Ganzes – möglichst automatisiert – getestet werden. Hierbei ist Test driven development hilfreich.
Test driven development (TDD)
Je eher Fehler in der Softwareentwicklung vermieden werden, umso weniger Fehler entstehen überhaupt erst im Gesamtsystem. Deshalb wird beim TDD immer erst ein möglichst einfacher Test geschrieben, dessen Fehlschlagen dann behoben wird, bis der Test korrekt durchläuft. Die kleinen Einheiten werden dabei üblicherweise durch Unit-Tests abgedeckt und dann im Großen beispielsweise durch Systemtests ergänzt.
Mehr dazu
Signal-Slot Concept
Dieses Konzept wird alternativ zu Callbacks eingesetzt, da es einfacher und flexibler ist. Es realisiert eine ereignisgesteuerte Kommunikation zwischen Objekten. Sobald ein Ereignis eintritt, wird ein Signal gegeben, woraufhin anschließend eine oder mehrere Funktionen reagieren können.
Mehr dazu
Anders als z.B. Zend Framework oder Symfony, ist FLOW3 leider nicht so komponentenbasiert, dass man einzelne Module herausziehen und in einem anderen Framework einsetzen kann. Zend Framework und Symfony Module etwa lassen sich umgekehrt in FLOW3 nutzen.
Man darf gespannt sein wie sich FLOW3 im Umfeld der PHP-Frameworks schlagen wird. Der große Hype, wie bei Symfony2, ist noch nicht losgeschlagen. Das ist den Entwicklern nach eigener Aussage allerdings auch lieber so, denn sie versprechen sich somit eine ruhigere und damit konstantere und stabilere Weiterentwicklung. Einige der neuen Konzepte sind auch in den anderen Frameworks schon zum Einsatz gekommen, oder in die aktuellen Versionen eingeflossen (siehe etwa Zend Framework 2, das noch nicht final released ist). Andere Konzepte sind noch recht neu für das PHP-Umfeld und es bleibt abzuwarten wie und ob sich diese hier durchsetzen werden.
Ein paar technische Infos noch auf die Schnelle:
– FLOW3 1.0 unterstützt PHP 5.3 ab Version 5.3.2
– FLOW3 1.0 unterstützt MySQL 5 ab Version 5.1.50
– FLOW3 ist verfügbar in einem GIT repository
– Aktuell: 1.1.0-rc2 (18.07.2012)
– FLOW3 verwendet standardmäßig Doctrine 2: Mehr dazu
– CouchDB wird nativ unterstützt: Weitere Informationen zur Persistenz
Quellen/Links:
http://framework.zend.com
http://symfony.com
http://flow3.typo3.org
http://de.wikipedia.org/wiki/Typo3
http://de.wikipedia.org/wiki/flow3
„Neues von FLOW3“, Titelthema im PHP Magazin Nr. 1.12
http://www.heise.de/developer/artikel/Robert-Lemke-im-Interview-zu-FLOW3-1362225.html Robert Lemke im Interview zu FLOW3 auf heise.de
http://git.typo3.org/FLOW3/Packages/TYPO3.FLOW3.git
http://it-republik.de/php/news/Persistenz-mit-FLOW3-und-Doctrine-2-%5BSlides%5D-062411.html Persistenz mit FLOW3 und Doctrine 2 [Slides]
Schreibe einen Kommentar