Erfreust du dich an den Vorteilen funktionaler Programmierung? Der Code ist verständlicher, da Funktionen keine Seiteneffekte haben. Immutable Objects vereinfachen das Debugging. Auch das Testen ist einfacher, weil Ergebnisse bei gleichen Eingabeparametern immer gleich sind. Solltest du deshalb auf rein funktionale Programmiersprachen umsteigen?
Das muss nicht sein. Die Vorzüge lassen sich auch in JVM Sprachen wie Java oder Kotlin nutzen. Wie ist das möglich? Durch die strikte Trennung von Funktionen mit und ohne Seiteneffekten (pure/impure Functions). Leider scheint das hierfür aus der Ruby-Welt bekannte Architekturmuster "Functional Core / Imperative Shell" in der Java-Welt kaum bekannt zu sein. Dies möchten wir mit diesem Vortrag ändern.
In dieser Architektur ist der Kern einer Anwendung („Functional Core“) funktional beschreibbar, Objekte sind immutable und Funktionen sind pure. Eingepackt wird der Kern in eine Seiteneffekt-behaftete Hülle („imperative Shell“) - schließlich müssen wir irgendwo Daten persistieren oder mit anderen Services sprechen. Wir möchten die Vor- und Nachteile dieses Musters aus Erfahrungen zusammenstellen, die von der Entwicklung bis zur Livesetzung von ES/CQRS-Microservices mit diesem Architekturprinzip entstanden sind.