Ich möchte heute eine kleine Serie zum Thema Einsatz von DMN-Engines in Enterprise-Projekten starten, in der ich euch zeigen möchte, wie Entscheidungstabellen sinnvoll in Anwendungen integriert werden können. Starten werde ich mit einem simplen Beispiel, welches die Möglichkeiten dieser Technologie aufzeigen soll.
In der klassischen Enterprise-Entwicklung versucht man die Geschäftslogik möglichst sauber in seinen Service-Klassen vom Rest der Anwendung (Präsentations- bzw. Persistenz-Schicht) zu trennen. Die fachliche Logik befindet sich in einzelnen Methoden und wird durch den Entwickler implementiert.
public boolean jackeMitnehmen(Integer temp, Integer month) {
...
}
Soweit nichts weiter ungewöhnlich. Was aber passiert, wenn sich diese Methoden häufig ändern bzw. die fachlichen Parameter sich anpassen müssen? Eine Möglichkeit besteht darin diese Parameter möglichst aus der Anwendung in bspw. die Datenbank auszulagern und die Methode möglichst generisch zu implementieren. Diese Variante bietet zwar mehr Flexibilität, stößt aber meist sehr schnell an ihre Grenzen.
Der Einsatz von Entscheidungstabellen kann hier eine sehr flexible Art der Anpassung ermöglichen ohne die eigentliche Implementierung verändern zu müssen. Der Aufbau ist dabei sehr simpel. Ich habe eine Menge an Eingabeparametern, Fälle in denen auf dieser Basis eine Entscheidung getroffen werden soll und Ausgabeparameter.
Die Entscheidungstabelle eine Jacke mitzunehmen würde wie folgt aussehen:
Diese hier abgebildete Entscheidung basiert auf einer alten Bauernregel, dass Monate mit r im Namen immer kühl sein können und man daher immer eine Jacke dabei haben sollte. Ich denke jeder Entwickler wird sich die klassische Implementierung so einer Methode vorstellen können. Was passiert aber nun, wenn sich diese Parameter ändern. Denken wir nur an die aktuellen Zeiten der Klimaerwärmung. Da ist es im September noch fast wärmer als im Juli. Somit könnten wir diese Regel entsprechend anpassen und den September aus unserer Empfehlung herausnehmen.
Dies ist natürlich ein sehr einfaches Beispiel und man wird denken, dass ich natürlich diese kleine Anpassung im Code sehr schnell erledigen kann. Aber wir versuchen uns diese Dynamik ja für ganz andere fachliche Vorgänge vorzustellen. Was ich an dieser Stelle zeigen möchte ist, dass ich ohne die Anpassung einer einzigen Codezeile diese neue Anforderung umsetzen kann. Ich muss lediglich in der Entscheidungstabelle den Bereich der Monate anpassen.
Das war schon der erste Teil zum Thema DMN. Ich habe mich hier absichtlich nur auf die eigentliche Idee von Entscheidungstabellen beschränkt und nur ein paar Zeilen Code eingefügt. In den nächsten Teilen werde ich viel tiefer hineingehen und sowohl die Erstellung der Entscheidungstabellen, als auch die Einbindung in Enterprise-Anwendungen erläutern.