In Zeiten der Symfony und Laravel Hypes stellt sich doch mal wieder die Frage, was ein alter Bekannter von uns eigentlich gerade so treibt: Das Zend Framework. Unter dem Motto “Totgesagte leben länger”, hat Matthew Weier O’Phinney im Januar 2015 [1] die Roadmap für das nächste Major Release ausgegeben.
Die neue Version soll eine Weiterentwicklung des Zend Framework 2 sein und Verbesserungen vor allem im Hinblick auf Einfachheit, Wiederverwendbarkeit und Performance bieten.
Wie es seitdem voranging und was der heutige Stand ist, dazu möchte ich euch Einblick in diesem zweiteiligen Blogartikel geben.
Der erste Fahrplan – 21.01.2015
Folgende Ziele und Todos wurden für den Fahrplan verkündet [1]:
- Komponenten in eigene, versionierte Projekte überführen, damit komponentenbasierte Neuerungen schneller integriert werden können
- Konzentration auf HTTP Messages, Stichwort PSR-7
- Überarbeitung des bestehenden MVC Frameworks, im Hinblick auf die neuen, unabhängigen Komponenten, um es einfacher und wiederverwendbarer zu machen. Das beinhaltet auch das Ziel, bestehende Anwendungen mit dem Zend Framework 2 MVC durch minimale, gut dokumentierte Anpassungen auf ZF3 zu bringen.
- Einbezug von leichtgewichtigeren Middleware Runtime Patterns als Alternative zum MVC Framework
- Möglichkeit, Apigility als Middleware Schicht einzusetzen, um damit bessere Performance und Einfachheit zu erreichen
- Optimierung für PHP 7 und Support ab PHP 5.5
Der ursprüngliche Plan war, diesen Fahrplan bis zum dritten Quartal 2015 umzusetzen.
Verlauf
Ende November 2015 folgte hierzu dann ein Update [2] – 25.11.2015
Hier wurde Bezug genommen zum aktuellen Status, noch offenen Punkten und ein paar Entscheidungen, die zwischenzeitlich getroffen wurden. Es wurde klar gestelt, dass das Zend Framework 3 kein einfaches neues Release des Frameworks sei, sondern eine Sammlung verschiedener Projekte, von denen das MVC selbst nur ein kleiner Teil sei. Viele davon seien schon fertig und einsetzbar. Um folgende Hauptthemen ging und geht es: Komponenten, PSR-7, Middleware und Zend Framework 3.
Komponenten
Ursprünglich ist das Zend Framework als Bibliothek aus Komponenten entstanden, die das MVC als eine Komponente enthielt. Diese wurde jedoch schnell zur Hauptkomponente und alles wurde darauf zugeschnitten. Außerdem musste man immer das komplette Framework herunterladen, wenn man auch nur eine einzelne Komponente nutzen wollte.
Als während des Zend Framework 2 dann Composer zutage trat, war es immer erforderlich, alle Komponenten gleichzeitig zu versionieren. Dadurch kam es zu verlangsamten Veröffentlichungen.
Für das Zend Framework 3 wurde es deshalb zum primären Ziel, die einzelnen Komponenten in ihre eigenen Repositories auszulagern, mit ganz eigenen, unabhängigen Entwicklungszyklen. Dieser Cut wurde im Mai 2015 vollzogen. Damit sollte es möglich sein, einzelne Komponenten gezielter zu verbessern und schneller auf die Straße zu bringen, aber auch die Zahl der Unterstützer anzuheben.
PSR-7
PSR-7 definiert eine Reihe von HTTP Message Schnittstellen, mit dem Ziel, den Austausch zwischen Frameworks und Bibliotheken zu erleichtern, da PHP selbst das nicht liefert. Viele Frameworks haben zwar eine Abstraktion bereitgestellt, diese sind jedoch alle unterschiedlich. Somit ist es schwer, untereinander zu wechseln (teilweise sogar innerhalb eigener Versionen), ohne wieder alles neu lernen zu müssen.
Sprachen wie Python, Ruby und Node.js bieten diese Abstraktion, so dass ein Entwickler sich letztlich gute Libraries heraussuchen kann, unabhängig von Frameworks.
PSR-7 erreicht das nun für alle Frameworks und Projekte, die sich an PSR-7 halten. Im selben Zuge entstand Diactoros [3], eine PSR-7-Implementierung und Stratigility [4], eine PSR-7-Middleware.
Middleware und Expressive
Unter Middleware versteht man hier ganz einfach Code, der sich zwischen hereinkommendem HTTP Request und ausgehendem HTTP Response befindet. In Stratigility wurde Folgendes implementiert:
function ( ServerRequestInterface $request, ResponseInterface $response, callable $next ) : ResponseInterface
Hierbei kann $next verwendet werden, um die nächste Middleware im System aufzurufen. Da Middleware für gewöhnlich sehr klein und fokussiert ist, ist sie meist leicht zu verstehen und sehr performant.
Expressive [5] ist das damit entstandene Microframework, um PSR-7 Middleware Anwendungen zu schreiben, aufbauend auf Stratigility.
Zend Framework 3
Wie schon erwähnt, bedeutet Zend Framework 3 wesentlich mehr, als MVC.
Das MVC selbst wurde nicht einschneidend verändert, da sich der Fehler aus dem Versionssprung von 1 auf 2 nicht wiederholen sollte. Damals wurde das MVC einem kompletten Rewrite unterzogen, mit gänzlich neuer Struktur. Dies machte eine automatische Migration unmöglich und somit blieben viele ZF1-Nutzer auf der Strecke. Deshalb waren die wichtigsten Ziele diesmal Performance und Kompatibilität zu erhöhen und die Möglichkeit Middleware zu nutzen. Möglichst abwärtskompatibel.
Als erste anzugehenden Anpassungen hatten sich herauskristallisiert:
- ServiceManager Performance erhöhen
- EventManager Performance erhöhen
- Möglichkeit schaffen Middleware auszuführen
- Abhänigigkeiten reduzieren
Wie es nun mit den ersten 3.0-Releases losging, was die zwischenzeitliche Entwicklung war und wie heute der Stand zum Zend Framework 3 ist, erfahrt ihr in Teil 2 dieses Artikels!
Links
[1] http://framework.zend.com/blog/announcing-the-zend-framework-3-roadmap.html[2] http://framework.zend.com/blog/zend-framework-3-update-and-roadmap.html
[3] https://github.com/zendframework/zend-diactoros
[4] https://github.com/zendframework/zend-stratigility
[5] https://zendframework.github.io/zend-expressive/
Schreibe einen Kommentar