Branch by Abstraction

Branch by Abstraction ist ein Muster für die schrittweise Ablösung und Neuentwicklung einzelner Module eines Legacy-Systems.

Das Muster abstrahiert fragile oder fehlerhafte Module mit Hilfe einer Abstraktionsschicht, die Aufrufe an das abzulösende Modul delegiert. Die Abstraktionsschicht wird im ersten Schritt kopiert und delegiert Aufrufe an eine Neuimplementierung des fehlerhaften Moduls. Unterhalb dieser Schicht wird das Modul ohne Zeitdruck neu implementiert. Aufrufer werden nach und nach mit der Fertigstellung neuer Funktionen auf das neue Modul umgestellt. Das Muster ermöglicht die Neuimplementierung auch von größeren Systemteilen unter Vermeidung abschließender Big Bang-Releases. Sind alle Funktionen umgestellt, wird das fehlerhafte Modul sowie die erste Kopie der Abstraktionsschicht gelöscht.

Wann passt das Muster?

Branch by Abstraction eignet sich für die iterative Renovierung eines in die Jahre gekommenen Monolithen. Das Vorgehen geht davon aus, dass man den Monolithen erhalten möchte und nicht in eine Service-orientierte Architektur überführen will. Eine wichtige Voraussetzung ist die Abstraktionsfähigkeit betroffener Module. Das zu renovierende Modul sollte kohärent und möglichst lose gekoppelt sein. Da dies in Legacy-Software eher selten der Fall ist, eignet sich Branch by Abstraction zudem für die Remodularisierung eines Monolithen. So lassen sich auch über den Code verteilte Funktionen unter eine Abstraktionsschicht zusammenfassen und nach aussen hin kohärent erscheinen. Die anschliessende Reimplemtierung der Funktionen innerhalb klarer Modulgrenzen führt zu einer losen Kopplung des Moduls.

Wann passt das Muster nicht?

Schlechte Wartbarkeit ist eines der häufigsten Probleme von Legacy-Systemen. Hinzu kommen nicht selten zu große Entwicklungsteams, in denen sich die Entwickelnden gegenseitig behindern. Oder einzelne Teile des Systems besitzen unterschiedliche Architekturcharakteristiken, die sich innerhalb eines Monolithen nur schwer realisieren lassen. Trifft eines der beiden letzteren Probleme zu, dann ist Branch by Abstraction weniger geeignet das System nachhaltig zu modernisieren. In diesem Fall bietet sich die Anwendung von Strangler Fig an, das neben einer Remodularisierung auch Lösungen für die Skalierung des Entwicklungsteams oder einer Architekturumstellung bietet.