Diplomarbeit: Code-Generierung für Spring mit OAW

Model-Driven Architecture für vollständige Spring-Anwendungen (2008)

Im Juli 2008 habe ich meine Diplomarbeit abgeschlossen. Hier sind einige theoretische Details dazu und Reflexionen nach mehr als 15 Jahren.

Das Hauptziel meiner Diplomarbeit war die Implementierung einer vollständigen Spring-Architektur unter Verwendung des Model-Driven Architecture (MDA) Ansatzes.

Die Arbeit war damals innovativ, da es keine einzige wissenschaftliche Arbeit gab, die eine vollständige Modell-zu-Modell- und Modell-zu-Code-Transformation für Spring-Anwendungen durchführte.

Einflüsse und Danksagungen

Meine Haupteinflüsse waren damals Markus Voelter und einige großartige Entwickler bei itemis, einem Unternehmen, das sich auf modellgetriebene Generierungsansätze spezialisierte. Ich möchte allen Entwicklern danken, die dieses Thema mit mir erkundet und sowohl praktischen als auch theoretischen Input geliefert haben.

Die klassische Spring-Architektur

Was ist eine klassische Spring-Architektur? Es ist das Best-Practice-Setup, das Entwicklern und Architekten bekannt ist. Die ersten Skizzen dafür finden sich in Rod Johnsons Büchern über Spring.

Klassische Spring-Architektur (2008)

Präsentationsschicht

Controller, Views

Service-Schicht

Geschäftslogik, Transaktionen

Datenzugriffsschicht

DAOs, Repositories

Domänenmodell

Entitäten, Value Objects

Da es 2008 kaum Code-Generierung innerhalb des Spring-Frameworks gab, wir aber ein konsistentes Muster für jeden Entity-CRUD-Zyklus hatten, machte es viel Sinn, die entsprechende Architektur aus einem gegebenen UML-Modell zu generieren.

Das OAW-Framework

Das OAW-Framework (openArchitectureWare) erschien am Horizont mit großartigen Fähigkeiten für textuelle Editoren innerhalb der Eclipse-IDE und bot eine Möglichkeit, modellgetriebene Generierung praktisch umzusetzen.

Was damals noch fehlte, war der Teil der Modell-zu-Modell-Generierung. Die Motivation dahinter war, die Geschäftsdomäne von der technischen Domäne auf der UML-Modellebene zu abstrahieren — und dies wurde ein Kernbestandteil meiner Diplomarbeit.

Der Zwei-Modell-Ansatz

Ich implementierte einen klassischen Zwei-Modell-Ansatz, der Anliegen trennt:

Platform Independent Model (PIM)

Geschäftsdomänen-Entitäten und Beziehungen, definiert in reinem Text mittels einer domänenspezifischen Sprache

Platform Specific Model (PSM)

Technisches Architekturmodell mit Spring-spezifischen Implementierungsdetails

Modell-zu-Modell-Transformation → Modell-zu-Code-Generierung

Hauptmerkmale der Implementierung

Textueller DSL-Editor

Eine domänenspezifische Sprache, die UML-Level-Modelle in reinem Text definiert. Dies war äußerst nützlich für Versionskontrollsysteme und das Zusammenführen von Änderungen im Team.

Code-Autovervollständigung

Volle IDE-Unterstützung innerhalb von Eclipse, einschließlich Syntaxhervorhebung und intelligenter Code-Vervollständigung für das textuelle Modell.

Massive Code-Generierung

Der generierte Code-Output war enorm und deckte die gesamte Best-Practice-Spring-Architektur ab — alles aus einer einzigen textuellen Modelleingabe.

Was wurde generiert

Aus einer einzigen textuellen Modelldefinition generierte das System:

  • Domänen-Entitäten mit JPA-Annotationen
  • Data Access Objects (DAOs) mit CRUD-Operationen
  • Service-Layer-Interfaces und Implementierungen
  • Spring-Konfigurationsdateien
  • Controller-Gerüste für die Präsentationsschicht

Reflexionen nach 15+ Jahren

Was kann ich mehr als 15 Jahre nach dem Schreiben dieser Diplomarbeit sagen?

Die Architektur besteht fort

Die Spring-Architektur ist im Wesentlichen immer noch dieselbe, mit einigen Variationen. Der geschichtete Ansatz bleibt der Goldstandard für Enterprise-Java-Anwendungen.

Convention over Configuration

Ich habe nach dieser Diplomarbeit nie mehr mit modellgetriebener Generierung gearbeitet, da ich in den E-Commerce-Bereich gewechselt bin. Moderne Spring-Features generieren heute die Datenbankschicht vollständig. "Convention over Configuration" hat viel des nötigen Konfigurationsaufwands eliminiert und macht Code-Generierung für einen großen Teil der Entwicklungsarbeit obsolet.

Immer noch relevant für komplexe Domänen

Ich sehe immer noch gute Anwendungsfälle speziell für OAW-Tooling wie Xtext für sehr komplexe Geschäftsdomänen, wie zum Beispiel Elektronik. In diesen Fällen kann ein Domänenexperte einen benutzerdefinierten Editor erstellen, um Software-Ingenieure bei ihrer Arbeit zu unterstützen.

Die vollständige Diplomarbeit herunterladen

Wenn Sie tiefer in meine Diplomarbeit eintauchen möchten, können Sie das vollständige Dokument herunterladen. Es ist auf Deutsch verfasst.

(Download-Link auf Anfrage verfügbar)