Im Finanzsoftwarepaket unseres Kunden spielen Geschäftstypen (Business Types) eine zentrale Rolle. Ein Geschäftstyp ist eine komplexe Datenstruktur, die alle für die Ausführung einer bestimmten geschäftlichen Transaktion notwendigen Informationen kapselt. Alle bestehenden Geschäftstypen (viele Dutzend) wurden bisher manuell implementiert, wobei recht strikt nach vorgegebenen, in einem Programmer’s Guide beschriebenen Patterns vorgegangen wurde.
Trotz systematischem Vorgehen weist der manuelle Ansatz grosses Optimierungspotential auf, insbesondere dann, wenn plötzlich viele Entwickler neue Business Types realisieren. Ein Programmer’s Guide ist nur so gut, wie er auch umgesetzt wird. Er kann die Einhaltung von Patterns weder verifizieren noch erzwingen.
Wegen der vielen manuell implementierten Patterns wurde es zudem mit steigender Anzahl von Implementationen immer schwieriger, Architekturänderungen zu vollziehen. Der Aufwand für entsprechende Modifikationen war so gross, dass man mangels Ressourcen am Bestehenden festhielt oder sich mit Workarounds behalf, wodurch Defizite in Wartbarkeit und Qualität des Codes entstanden.
MDD schien ein viel versprechender Weg zu sein.
Der Vorteil eines modellbasierten Ansatzes war umso grösser, weil in der gegebenen Architektur pro Geschäftstyp eine Vielzahl kleiner, inhomogen aufeinander abgestimmter Codefragmente erzeugt werden musste. Nicht nur die Business-Logik selbst, sondern auch Datenbankdefinitionen, Zugriffsroutinen, Migrationen, etc., deren Kohärenz zur Entwicklungszeit üblicherweise nicht automatisch sichergestellt werden kann.
Aus den bestehenden Business-Typen und Dokumentation wurden die Patterns herausgearbeitet und durch Reverse Engineering (in mehreren Iterationen) wurden Modelle und Metamodelle erzeugt. Mangels geeigneter DSL-Tools (Domain Specific Language) im Jahre 2008, wurde ein bewährtes UML2-basiertes Tool (Rational Software Architect) als Modell-Repository gewählt. Zur Unterstützung von Modelltransformationen und Codegenerierung wurden oAW-Werkzeuge (openArchitectureWare) eingesetzt.
Es gelang, die bestehenden Geschäftstypenimplementierungen aus dem Code zu grossen Teilen in Modelle zu überführen, und aus diesen Modellen heraus dann den Code neu zu generieren.
Die Vorteile sind offensichtlich: