entwickler.de

Legacy-Anwendungen mit Expressive modernisieren: Lohnt sich das?

In einer Traumwelt könnte man immer mit den neuesten Tools und Technologien arbeiten. Die Realität sieht leider anders aus, denn viele Entwickler müssen bei ihrer täglichen Arbeit auf die Maintenance von Legacy-Anwendungen Rücksicht nehmen. Dabei lassen die sich recht unkompliziert modernisieren – zum Beispiel mit dem Microframework Expressive. Wir sprachen im Vorfeld seiner Session auf der International PHP Conference mit Ralf Eggert genau über dieses Thema und merken schnell – der Einsatz von Expressive in Legacy-Anwendungen kann sich lohnen.

Legacy-Anwendungen modernisieren – darauf kommt es an

entwickler.de: Ralf, viele Entwickler möchten gerne mit modernen PHP-Frameworks und -Tools arbeiten, müssen aber oft auf veraltete Legacy-Anwendungen Rücksicht nehmen. Welche Möglichkeiten gibt es, beides zu vereinen – insbesondere, wenn ein Relaunch nicht in Frage kommt?

Ralf Eggert: Statt auf der grünen Wiese einen kompletten Rewrite der Legacy-Anwendung zu starten und sich der Gefahr eines Scheiterns auszuliefern, ist es sinnvoller, die alte und die neue Anwendung parallel zu betreiben. Dies kann im einfachsten Fall auch eine Weiche in der .htaccess-Datei des Apache Webservers sein, der anhand der URL entscheidet, ob die Legacy-Anwendung oder die neue Anwendung für diese Anfrage aufgerufen werden soll. Somit kann ein altes und ein neues Framework parallel betrieben werden.

Der große Vorteil den Entwickler dadurch haben, ist der parallele Betrieb zwischen alt und neu. Neue Features können dabei bereits mit dem neuen Framework umgesetzt werden, während Änderungen am Bestand weiterhin in der Legacy-Anwendung erfolgen können. Entwickler sind somit nicht gezwungen, ein Detail mehrmals zu implementieren, wie das bei einem klassischen Rewrite auf der grünen Wiese oft der Fall ist.

entwickler.de: In deiner Session auf der International PHP Conference stellst du das Microframework Expressive vor. Was steckt hinter Expressive und welche Vorteile bietet das Tool?

Eggert: Das Microframework Zend\Expressive basiert auf dem Middleware-Konzept und ist das neue Zugpferd im Zend-Framework-Stall. Es ist leichtgewichtiger als der klassische MVC-Ansatz. Durch die Middleware Pipeline hat der Entwickler den kompletten Ablauf einer Anfrage selber in der Hand und muss sich nicht auf eventbasierte Abläufe im MVC-Prozess verlassen, die viele Entwickler nicht überblicken können. Zudem ist Zend\Expressive sehr offen konzipiert und unterstützt neben den klassischen Zend-Framework-Komponenten auch andere Dependency-Injection-Container, Router sowie Template Renderer.

Der MVC-Ansatz führte in vielen Projekten mit der Zeit dazu, dass die Controller-Klassen mit immer mehr Aktionen bestückt wurden, die wiederum andere Abhängigkeiten mit sich brachten. Dabei sind wahre Monster entstanden, die schwer wartbar sind. Beim Middleware-Ansatz mit Zend\Expressive gibt es keine Controller, sondern nur kleine, kompakte und übersichtliche Aktions-Klassen, die nur eine Aufgabe lösen.

Zend\Expressive kann sehr vielseitig eingesetzt werden. Es können komplette Webanwendungen implementiert werden. Aber auch klassische REST-APIs oder sogar moderne Alexa Skills lassen sich mit Zend\Expressive umsetzen.

entwickler.de: Gibt es auch Nachteile bei der Nutzung von Expressive?

Eggert: Zend\Expressive ist im Januar 2016 in der stabilen Version 1.0 erschienen. Mittlerweile sind wir bei Release 2.0 angekommen. Zur Anfangszeit mussten die Entwickler viele Dinge selber implementieren, die im MVC-Umfeld automatisch funktionierten. Ein Beispiel ist die enge Verknüpfung von Zend\Navigation mit dem Zend\Mvc-Router. Dies hat dazu geführt, dass man Zend\Navigation nur bedingt mit Zend\Expressive einsetzen konnte. Auch das automatische Einlesen von Konfigurationen für den Form-Element-Manager oder den Validator-Manager hat zu Beginn nicht so gut funktioniert. Die meisten Kinderkrankheiten sind mittlerweile ausgemerzt. Ich will aber nicht ganz ausschließen, dass es immer noch Dinge gibt, die mit Zend\Expressive nicht sofort so gut funktionieren, wie wir das bei Zend\Mvc gewohnt sind.



Go for PHP Developers

mit Terrence Ryan (google)

Everything you need to know about PHP 7.2

mit Sebastian Bergmann (thePHP.cc)

Legacy-Anwendungen mit Expressive modernisieren

entwickler.de: Expressive lässt sich auch nutzen, um eben die angesprochenen Legacy-Anwendungen zu modernisieren. Worauf sollten Entwickler dabei achten?

Eggert: Zend\Expressive eignet sich unter anderem auch sehr gut für den Betrieb einer Legacy-Anwendung, die Schritt für Schritt modernisiert werden soll. Dabei dient Zend\Expressive quasi als Mantel für die alte Legacy-Anwendung. Eine Middleware stellt sicher, dass alle Anfragen, die noch nicht von den Aktionen der Zend\Expressive-Anwendung bedient werden können, durch die Legacy-Anwendung ausgeführt werden können.

Das Prinzip ist einfacher, als es vielleicht klingt. Die Legacy Anwendung wird zuerst in ein eigenes Verzeichnis verlagert, danach wird Zend\Expressive manuell im Projekt installiert und lauffähig gemacht. Dann wird die besagte Middleware für die Legacy-Anwendung eingerichtet. Fortan wird die alte Anwendung dann durch Zend\Expressive ausgeliefert. Der zusätzliche leichte Overhead ist in der Praxis zu vernachlässigen. Der Vorteil, nun im laufenden Betrieb einzelne Bereiche migrieren zu können, macht dies allemal wett. Wie genau das im Detail geht, zeige ich in meiner Session.

entwickler.de: Hast du noch weitere Tipps und Tricks für die Arbeit an Legacy-Anwendungen?

Eggert: Man sollte nie zu viel auf einmal wollen. Wer fünf Schritte gleichzeitig gehen möchte, der macht sich das Leben unnötig schwer. Außerdem sollte man nie versuchen, das veraltete Frontend bestehend aus HTML, CSS und JavaScript gleichzeitig zu modernisieren, während man auch am PHP-Backend unter der Haube schraubt. Das geht fast immer schief oder bereitet große Probleme – es sei denn, man hat nahezu unerschöpfliche Personalressourcen.

Stattdessen könnten Entwickler nach der Einrichtung der Legacy-Weiche per Middleware schauen, dass Sie das PHP-Backend erst einmal so weiter betreiben und erst das Frontend auf ein moderneres CSS-Framework bringen. Danach fällt es auch leichter, neue Features gleich im neuen Design umzusetzen.

Unser Interview-Partner

Ralf Eggert ist Diplom-Wirtschaftsinformatiker (FH) und Autor mehrerer Bücher über das Zend Framework. Ralf entwickelt seit 1998 in PHP und nutzt seit 2006 aktiv das Zend Framework. Er schreibt als Kolumnist regelmäßig für das PHP Magazin und ist als Speaker seit einigen Jahren auf Barcamps und Konferenzen aktiv. Zudem ist Ralf als Trainer, Consultant und Contributor für das Zend Framework tätig. Im Oktober 2016 ist sein neues Buch zum Zend Framework 3 erschienen. Aktuell beschäftigt er sich viel mit der Programmierung von Alexa Skills für den Amazon Echo auf Basis von PHP.