Folge 2: Separation of Concerns implementieren mit dem „Hook Registry“ Design Pattern by Carl-Philip Hänsch published on 2021-01-02T14:27:28Z In der letzten Folge habe ich das Thema Separation of Concerns angesprochen. Das Ziel dahinter ist, den Code eines Projekts so weit voneinander zu trennen, dass man den Aufwand deutlich reduziert, wenn Änderungen am Code zu machen sind, oder Sachen wieder rausfliegen oder ersetzt werden sollen. Dazu soll jeweils der Code, der zu einem Concern - oder auch Feature genannt – gehört, möglichst beisammen bleiben und nicht mit anderem Code, der andere Features umsetzt, gemischt werden. Eine relativ einfache Methode möchte ich euch heute vorstellen, da sie von vielen Plugin-Systemen wie z.B. der Eclipse IDE, aber auch allen gängigen Browsern in ihren Plugin-Systemen verwendet werden. Ihr könnt euch also eine „sauber programmierte Software“ wie ein leeres Programm vorstellen, bei dem jedes Feature wie durch ein Plugin jederzeit hinzufügbar – oder entfernbar ist. Die Rede ist von der Hook-Registry. Dabei handelt es sich um ein zentrales Register an Hooks, also Callbacks, die zu einem bestimmten Zeitpunkt zu einem bestimmten Zweck aufgerufen werden. Um es etwas plastischer zu machen, nehme ich das Menüsystem zum Beispiel. Angenommen, die Software hat ein Hauptmenü mit den Menüpunkten Datei, Bearbeiten, Ansicht, Fenster und Hilfe mit ihren jeweiligen Unterpunkten: Datei Neu Öffnen Schließen Beenden. In schlecht organisierter Software gibt es jetzt einen zentralen Punkt, wo die Menüs aufgebaut werden: Die Liste mit Menüeinträgen muss vollständig sein und verweist auf Funktionen quer durch die Software. Anschließend sind die Aktionen hinter den Menüeinträgen in den einzelnen Dateien ausimplementiert. Warum ist das schlecht? Naja jedes mal, wenn jemand ein neues Feature hinzufügen will oder entfernen muss, muss er nicht nur die Dateien anfassen, die das eigentliche Feature implementieren, sondern zusätzlich noch eine handvoll zentraler Dateien (wie der Menü-Aufbau-Code oder eine Initialisierungs-Routine oder eine große If-Kaskade, in der nochmals alle vorhandenen Features aufgelistet sind), anfassen. Vergisst man eine dieser Stellen, macht man die Software kaputt oder hinterlässt funktionslose Menüpunkte. Genre Technology