Domain Driven Design mit CQRS
Domain Driven Design mit CQRS
Arbeitsbedingt habe ich mich in den letzten Wochen sehr viel mit alternativer Softwaremodellierung im Bereich Architektur komplexer Unternehmensanwendungen beschäftigt. Allem voran geht dabei natürlich das Domain Driven Design welches von Eric Evans auf den Weg gebracht wurde. Durch die Recherche bin ich auf das recht junge Architekturmuster CQRS (Command Query Responsibility Segregation) gestoßen.
Was genau ist CQRS ?
Die meisten Anwendungen im Unternehmenssektor arbeiten mit Daten, die in den häufigsten Fällen in irgendeiner Form gespeichert/gelesen werden. Oft werden solche Anwendungen nach dem typischen CRUD (Create, Read, Update, Delete) Muster implementiert. Für viele Bereiche reicht diese Art der Implementierung auch aus, sofern die Software einen bestimmten Grad der Komplexität nicht überschreitet.
Ändern sich die Anforderungen mit der Zeit jedoch von einem simplen CRUD hin zu einem System welches Abhängigkeiten und Prozessabläufe anfordert, sinkt die Wartbarkeit und ein System wird in kürzester Zeit zu einem klumpen Code den keiner mehr durchschaut weil die Prozesse nicht klar definiert sondern durch Datenänderungen von allen Seiten abgebildet sind.
CQRS basiert auf der Trennung von Lese und Schreibvorgängen über Anweisungen (Command) und Abfragen (Query). Dies sind die Kernaufgaben einer Software. Das Ausführen von Aufgaben, die vom Benutzer kommen und das Antworten auf Anfragen. Das Verändern von Daten wird dabei ebenfalls über Befehle angestoßen welche die notwendigen Prozesse anstoßen. Das Anzeigen von Daten könnte dabei über eine Abfrage geschehen.
Und wie realisiert man das ?
Für Entwickler ist der wohl schwierigste Schritt zunächst, sich von den bestehenden Arbeitsweisen zu lösen und einen neuen Ansatz zu probieren. Man entwickelt nicht länger aus einer Datenbank heraus sondern betrachtet zunächst nur die Domain, die wiederum die Prozesse zusammenfasst, wenn neue Anforderungen umgesetzt werden müssen. Das ist natürlich besonders schwierig wenn man bereits eine Datenbankstruktur hat, die über Jahre gewachsen ist. Dennoch muss man sich vor Augen halten, dass die Datenhaltung nicht länger ein Bestandteil der Fachlichkeit einer Anwendung ist.
Ich bin selbst noch neu auf dem Gebiet und werde im zweiten Teil versuchen einen weiteren Einstieg in die Umsetzung zu erläutern.