© Sergieiev/Shutterstock.com
Brückenbauer in der Open-Source-Welt – Teil 3

Inkrementelle Codegenerierung mit CobiGen


Etablierte Referenzarchitekturen wie devonfw machen es möglich, ein hohes Maß an Standardisierung über verschiedene Softwareprojekte hinweg zu etablieren. Starke Vorgaben, wie beispielweise Namenskonventionen für Quellcodeartefakte, bieten darüber hinaus eine klare Sichtbarkeit der Architektur auf der Quellcodeebene. Sind solche Vorgaben für (agile) Entwickler durchzuhalten und führt Schichtenbildung nicht teilweise zu nervigem Boilerplate-Code?

Genau hier hilft CobiGen und nimmt dem Entwickler die langweilige Arbeit ab, sorgt aber gleichzeitig für Struktur, Homogenität und Ordnung. So verbindet man eine wartbare und erweiterbare Architektur mit Effizienz in der Entwicklung.

Starke Codekonventionen gereichen nicht nur uns Entwicklern und Architekten zum Vorteil, sondern erlauben es auch, querschnittlich Werkzeuge zu etablieren, um diese Strukturinformationen zu verstehen, um Informationen aufzubereiten oder neue Artefakte automatisiert zu erstellen. Letzteres sollte über einen generativen Ansatz implementiert werden, der jedoch schnell auf kritisches Feedback trifft, wie zum Beispiel:

  • Lohnt sich der Aufwand der Entwicklung?

  • Wer wartet den Generator?

  • Die Ergebnisse sind meist viel zu spezifisch oder auch generisch, als dass man sie einfach im Projekt benutzen und einen Mehrwert generieren kann.

Eine Welt voller Programmiersprachen und Technologiestacks

Nicht zuletzt im Kontext von devonfw merkt man schnell, dass die Open-Source-Welt in den letzten Jahren eine Vielzahl an Programmiersprachen und Technologien auf den Markt gespült hat, derer kaum jemand Herr wird. Dabei bedient ein Großteil der Programmiersprachen oder Technologien bestimmte Nischen in der Softwareentwicklung und nur eine Handvoll von ihnen die breite Masse. Nichtsdestotrotz kommen gerade im Hinblick auf Technologien auch immer wieder Nischen- oder Alternativtechnologien in Softwareprojekten zum Einsatz, da jeder Kundenkontext mit seinen speziellen Anforderungen kommt. Schnell ist man dann nicht nur bei den oben aufgelisteten kritischen Fragen zu einem generativen Ansatz, sondern auch bei der essenziellen Frage angelangt, für welche Programmiersprache und welche Technologien wir den generativen Ansatz überhaupt implementieren wollen. Gerade im Hinblick auf devonfw mit seinem Fokus, mehrere Programmiersprachen und Technologiestacks auf Basis von Java, Node.js oder .NET zu standardisieren und dabei jedem Softwareprojekt als Anwender gerecht zu werden, wird ein Generator zur Mammutaufgabe.

Es gibt im Kontext von Generatoren zwei Kategorien: den sprach- und technologiespezifischen Generator, der bis hin zur syntaxsicheren Generierung häufig sehr zuverlässig und sicher das generiert, wofür er geschaffen wurde. Hierzu zählen beispielsweise Generatoren, die mittels des konkreten oder eines abstrakten Syntaxbaums einer spezifischen Programmiersprache Quellcode modellieren und serialisieren können. Zu der zweiten Kategorie gehören Generatoren, die grundsätzlich kein Verständnis über die zu generierende Zielsprache besitzen. Hierzu zählen u. a. Text-Template-basierte Generatoren wie Apache FreeMarker [1], Apache Velocity [2] und viele weitere. Die Idee bei ihnen ist die Spezifikation eines sogenannten Templates (Abb. 1), das mittels einer vordefinierten Sprache durch einen Interpreter interpretiert wird und Text als Generat erzeugt. Das Generat entbehrt dabei jeglicher Form und ist damit auch nicht auf eine Programmiersprache als garantiertes Ergebnis abbildbar.

brunnlieb_devonfw_3_1.tif_fmt1.jpgAbb. 1: Basiskonzept eines Text-Template-basierten Generators

Ich möchte jedoch der Vollständigkeit halber auch auf akademische Ansätze wie Repleo [3], SafeGen [4] sowie einen weiterführenderen Ansatz des hier präsentierten Generators CobiGen [5] verweisen, die syntaxsichere Generierung mit Bezug auf eine vordefinierte Zielsprache gewährleisten können. Wir werden uns im Rahmen dieses Artikels auf die einfachste von FreeMarker und Velocity bereitgestellte Form der Template-basierten Generierung konzentrieren, die auch in der Praxis ein höheres Maß an Flexibilität bieten als synt...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang