Wieso sind Altsysteme ein integraler Bestandteil heutiger Softwareentwicklung?
Altsysteme finden sich in vielen Softwareprojekt wieder. Dabei handelt es sich um häufig genutzte und bewiesenermaßen nützliche Softwarebestandteile. Jedoch gibt es häufig das Bedürfnis diese dennoch zu erneuern. Beispielsweise ist das Altsystem nicht mehr performant genug. Die Legacy Software skaliert unvorteilhaft mit der Rechenleistung. Es gibt neue erwünschte Features, die leider nicht zum ursprünglichen Architekturdesign passen. Neue Technologien und Schnittstellen sollen im Altsystem integriert werden. Oder das Altsystem muss neue Sicherheitsanforderungen erfüllen. Um die Zukunftsfähigkeit bestehender Software zu erhalten ist deren Weiterentwicklung deshalb ein wichtiger Bestandteil in der Softwareentwicklung.
Was ist das Strangler Fig Pattern?
Das Strangler Fig Pattern wurde von Martin Fowler als Metapher popularisiert. Strangler Fig heißt übersetzt Würgefeige. Die Metapher beschreibt, wie die Würgefeige rankenartig am Stamm eines bestehenden Baumes wächst. Mit dem Wachstum der Würgefeige stirbt der ursprüngliche Baum langsam ab. So nimmt die Würgefeige den Platz des vorherigen Baumes ein. Genau so soll mit dem Strangler Fig Pattern auch das Altsystem umschlungen und mit der Zeit langsam abgelöst werden. Demnach ist das Strangler Fig Pattern eine Vorgehensweise, um Rewriting umzusetzen.
Wann ist Refactoring sinnvoll?
Entwickler schlagen gerne Refactoring vor, wenn der Legacy-Code die Weiterentwicklung stört. Jedoch bringt diese Instandhaltungsarbeit Kosten und Risiken mit sich ohne merkliche Erneuerung, weshalb es schwierig ist, diese Maßnahmen zu rechtfertigen. Deshalb ist es ein guter Ansatz, Alt-Code genau dann zu „refactoren“, wenn dieser sowieso für neue Features angepasst werden muss. Hierfür sollte etwas mehr Entwicklungszeit bei der Planung eingerechnet werden. Jedoch verspricht man sich Zeitersparnisse für die zukünftige Entwicklung. Aus der Zeitersparnis ergibt sich langfristig ein wirtschaftlicher Vorteil. Um die Risiken des Rewritings gering zu halten, nutzen wir gerne das Strangler Fig Pattern.
Anwendung des Strangler Fig Patterns
Das Vorgehen des Strangler Fig Patterns sieht wie folgt aus. Zuerst wird eine allgemeine Schnittstelle zum Altsystem definiert. Die Schnittstelle (Interface) wird auch Strangler Facade genannt. Das Interface kann für neue Funktionalitäten erweitert werden, die erwünscht werden. Die neuen Funktionalitäten werden in der neuen Architektur implementiert. Die neue Architektur bleibt 100% von dem Altsystem unabhängig. Der Legacy Code sollte auf keinen Fall angepasst werden. Falls Common Code aus dem Altsystem benötigt wird, sollte dieser kopiert und „refactored“ im neuen System eingebaut werden.
Sobald es Anforderungen gibt, Komponenten im Altsystem anzupassen, werden diese stattdessen in das neue System integriert und dort erweitert. Das Altsystem bleibt immer unverändert.
Zuletzt ist die Modernisierung fertiggestellt, sobald das komplette Interface des Altsystem durch das neue System ersetzt wird. In einigen Fällen kann es passieren, dass gewisse Teile des Altsystem bestehen bleiben um Rückwärtskompatibilität zu garantieren. Diese Funktionalitäten sind es nicht Wert zu erneuern oder werden nicht mehr benötigt. Stattdessen werden sie als „deprecated“ eingestuft. Eine sehr praktische Eigenschaft dieses Designs ist, dass über die Strangler Facade jederzeit zwischen alt und neu gewechselt werden kann. Die Strangler Facade könnte beispielsweise mit etwas Logik erweitert werden, um bei Fehlschlägen in der neuen Architektur einen Retry mit dem alten System zu machen. Es könnten beide Systeme parallel gestartet werden, um Fehlerquoten oder Performance Unterschiede festzustellen. Die Flexibilität, dass jederzeit das Legacy Systemverhalten wiederhergestellt werden kann, sorgt für die gewünschte Absicherung.
Fazit
Bei der Modernisierung von Altsystemen ist das Strangler Fig Pattern ein nützliches Tool, um das Risiko der Umbauarbeiten zu minimieren und auch während einer Modernisierung lieferfähig zu bleiben. Bei SEKAS haben wir das Pattern bereits in verschiedenen Projekten erfolgreich und gewinnbringend eingesetzt. Jedoch gibt es auch Limitierungen des Strangler Fig Patterns. Einerseits kann es eine Herausforderung sein, eine Schnittstelle zum Altsystem festzulegen, um diese als Strangler Facade nutzen zu können. Andererseits kann es schwierig sein, das alte und neue System vollständig voneinander getrennt zu halten. Sofern diese Limitierungen eingehalten werden können, bietet das Strangler Fig Pattern eine sichere Vorgehensweise bei der Software-Modernisierung.