DDD & Co., Teil 10: Hallo wolkenkit

the next big thing  –  0 Kommentare

Seit der vergangenen Folge ist der fachliche Code für TodoMVC vollständig. Allerdings fehlt der gesamte technische Rahmen, der die Funktionalität über eine REST- und WebSocket-API anbietet, die fachlichen Ereignisse persistiert und die Anwendung bei Bedarf skaliert. Das vom Autor mitentwickelte Open-Source-Framework wolkenkit schafft Abhilfe.

In Folge 6: Vom Modell zum Code ist Code entstanden, der die Domäne der TodoMVC-Anwendung auf der Basis von Aggregaten abbildet. In Folge 9: Code für das Read-Model ist dazu ergänzend der Code entstanden, der die fachlichen Ereignisse für die Leseseite der Anwendung aufbereitet.

Die bisherige rein fachliche Ausrichtung führt dazu, dass der Code der Anwendung leicht verständlich ist. Allerdings fehlen zahlreiche Aspekte, die für das Ausführen der Anwendung relevant sind. Dazu zählen unter anderem REST- und WebSocket-APIs wie auch die Persistenz.

Wie in den vergangenen Folgen erläutert, liegt es nahe, hierfür einen CQRS- und Event-Sourcing-basierten Ansatz zu verfolgen. Allerdings ist dessen Implementierung zeitaufwendig und hat vor allem keinerlei Bezug zu der konkreten Anwendung. Daher wäre es praktisch, diesen Unterbau ein einziges Mal generisch zu entwickeln und ihn dann für diverse Anwendungen einsetzen zu können.

Einen derartigen Rahmen könnte man als CQRS- und Event-Sourcing-Framework bezeichnen, der dann besonders gut funktioniert, wenn die Modellierung der Anwendung mit Domain-Driven Design erfolgt ist. Genau das will das Open-Source-Projekt wolkenkit leisten.

Die Installation von wolkenkit unterscheidet sich je nach Betriebssystem geringfügig. Unterstützt wird außer macOS, Linux und Windows auch die Installation auf einem Server, der mithilfe von docker-machine eingerichtet wird. Das Ergebnis ist stets die CLI-Anwendung wolkenkit, die sich auf der Konsole aufrufen lässt:

$ wolkenkit --version

Um die TodoMVC-Anwendung zu starten, genügt es, den Code in ein Verzeichnis zu kopieren. Der gebündelte Quellcode findet sich in dem GitHub-Repository thenativeweb/wolkenkit-todomvc. Wechselt man in das Verzeichnis und ruft dort das Kommando

$ wolkenkit start

auf, startet die Anwendung. Der erste Aufruf dauert einige Minuten, da wolkenkit zunächst einige Docker-Images aus dem Internet herunterladen muss, unter anderem PostgreSQL für den Event-Store. Das ist jedoch ein einmaliger Schritt, der bei allen weiteren Aufrufen entfällt, was sie deutlich beschleunigt.

Mehr ist nicht zu tun. wolkenkit startet einen Webserver, der die modellierte Domäne über eine REST- und eine WebSocket-API anbietet, kümmert sich um das Aufsetzen des Event-Stores und der Lesedatenbank und verdrahtet die einzelnen Server. Damit hat man ein lauffähiges Backend, ohne dass man eine einzige Zeile technischen Code hätte schreiben müssen.

Was noch fehlt, ist ein Frontend für die Anwendung. Auch der Code dafür ist in dem zuvor genannten Repository enthalten, wobei es sich um eine einfache statische Webseite mit clientseitigem JavaScript handelt.

Zum Starten des Frontends ist ein einfacher Webserver erforderlich, der sich mithilfe von npm leicht installieren lässt:

$ npm install -g http-server

Anschließend genügt es, das Kommando

$ http-server ./client -o

auf der Konsole aufzurufen, um den Webserver zu starten und den Standardbrowser des Systems zu öffnen, worüber man dann auf die TodoMVC-Anwendung zugreifen kann.

Das Beispiel zeigt ein anderes Vorgehen als für Software häufig üblich. Anstatt direkt loszulegen, gilt es zunächst, mithilfe von Domain-Driven Design (DDD) die Fachdomäne zu modellieren. Der Fokus liegt dabei rein auf der Fachlichkeit, nicht auf der Technologie. Im Kern steht das Entwickeln einer gemeinsamen Sprache, mit der sich ein interdisziplinäres Team verständigen kann.

Die auf dem Weg modellierten Aggregate, Kommandos und fachlichen Ereignisse lassen sich nahtlos in Code übersetzen. Die Nähe zu Event-Sourcing und CQRS ist in DDD zwar nicht inhärent vorgesehen, drängt sich praktisch aber auf. Daraus resultiert der Umgang mit Eventual Consistency, was letztlich eine Synchronisation von Schreib- und Leseseite bedingt.

Das wolkenkit unterstützt Teams dabei, sich auf die relevanten Aspekte zu konzentrieren, nämlich auf das Modellieren der Fachlichkeit mit DDD. Den notwendigen technischen Unterbau liefert es frei Haus, was die Anwendungsentwicklung beschleunigt. Da die benötigte Zeit zudem für fachliche Diskussionen aufgewendet werden kann, wird mehr über das gewünschte Produkt gesprochen als über den technischen Unterbau, was letzten Endes zu besserer Software führen dürfte.

Das wolkenkit steht in zwei Varianten zur Verfügung. Die Community-Edition steht unter einer Open-Source-Lizenz zum freien Download zur Verfügung. Die kostenpflichtige Enterprise-Ausgabe hingegen bietet zusätzliche Funktionen und erlaubt den Einsatz im kommerziellen Umfeld.

Nähere Informationen zum wolkenkit finden sich in der ausführlichen Dokumentation, für den Austausch mit anderen Interessierten und den Entwicklern von wolkenkit steht ein Slack-Team zur Verfügung. Für mehr Details zu den grundlegenden Konzepten CQRS, Event-Sourcing und DDD steht außerdem eine kostenfreie Broschüre zum Download zur Verfügung.

tl;dr: wolkenkit ist ein CQRS- und Event-Sourcing-Framework für JavaScript und Node.js, das eine fachlich modellierte Anwendung mit dem erforderlichen technischen Rahmen versieht, um die Anwendung ausführen zu können.