Flexibel programmieren mit dem Fluent Interface

Architektur/Methoden  –  Kommentare

Diverse Paradigmen sollen Entwicklern helfen, große Projekte klar zu strukturieren und den Überblick zu bewahren. Nicht immer geht das einher mit Verständlichkeit und guter Lesbarkeit von Programmen. Das Entwurfsmuster Builder zusammen mit dem Fluent Interface können hier helfen.

Das Entwurfsmuster "Erbauer" (Builder) ist in die Jahre gekommen. Neue Möglichkeiten beim Erstellen komplexer Objektgeflechte ergeben sich bei der Implementierung einer sogenannten "flüssigen Schnittstelle" (Fluent Interface, siehe "Onlinequellen" [a]). Dieser Artikel beschreibt evolutionär in wenigen Schritten eine solche Schnittstelle, ausgehend von einer klassischen Objekterzeugung.

Bei großen Applikationen spielt fast immer die Anbindung externer Systeme eine Rolle. Hierbei werden Daten ausgetauscht, die ein Drittsystem meist in einem vorgegebenen Format übermitteln soll. In vielen Fällen handelt es sich dabei nicht um Standards wie XML, sondern um proprietäre Formate. Eins davon soll diesem Artikel als Beispiel dienen. Das Format besteht aus Abschnitten, von denen jeder eine Menge von Werten aufnimmt, die an bestimmten Stellen des Abschnitts notiert werden. Eine formale Spezifikation dieses Formats sieht so aus:

(Abschnitt($stelle:wert)*$)+

Zu lesen ist diese Notation wie folgt: "Mindestens ein Abschnitt nimmt beliebig viele Tupel von Stellen zu Werten auf, wobei vor jedem Tupel ein Dollarzeichen steht und jedem Abschnitt ein Dollarzeichen folgt." Ein Beispiel wäre:

abschnitt$1:wert$3:anderer_wert$anderer_ abschnitt$42:wieder_anderer_wert

Dieses Beispiel soll als Anschauungsobjekt für eine API dienen. Deren Code ist in einer für viele deutschsprachige Projekte typischen Mischform aus deutscher und englischer Sprache gehalten. Der Vorteil dabei ist, dass beim – zumindest national gesehen deutschsprachigen – Kunden Begriffe wie Abschnitt, Wert und Stelle zum Sprachgebrauch gehören und die Entwickler somit weniger Kontextwechsel durchführen müssen, als wenn sie diese Begriffe ins Englische übersetzten.