Der Vortrag "Unshackle Your Domain" von Greg Young war für mich der Höhepunkt der QCon. Ein architektonischer Ansatz, der relativ einfach zu verstehen ist, unglaublich skalierbar ist und ein reichhaltiges Domänenmodell unterstützt.
Bei seiner Präsentation wies Greg schnell auf einige der Probleme mit der traditionellen Architektur von Unternehmensanwendungen wie JEE hin. Diese Architektur besteht in der Regel aus einem "objektorientierten" Domänenmodell, das in einer prozeduralen Serviceschicht gekapselt ist, in einer relationalen Datenbank persistiert, von der Benutzeroberflächenschicht auf einem Dateneingabebildschirm abgeflacht und von einem Berichtstool täglich in Managementberichte umgewandelt wird. Bei so vielen Mastern ist es kein Wunder, dass das Domänenmodell anämisch wird und die Anwendung schwer zu skalieren ist.Greg brauchte etwas Besseres. Etwas, das in der Lage ist, 10.000 Transaktionen pro Sekunde zu bewältigen, das kugelsichere Prüfungen unterstützt und über ein reichhaltiges Domänenmodell zur Implementierung komplizierter finanzieller Geschäftslogik verfügt.Seine wichtigste Erkenntnis ist, dass die Anwendung Befehle für Zustandsübergänge explizit als Klassen modellieren und diese Befehle auf der Ebene der Anwendungsschnittstelle strikt von Abfragen trennen sollte. So wird jede Art von Client-UI oder Bericht die Abfrage-Schnittstelle der Anwendung verwenden, um die benötigten Daten über eine dünne DTO-Schicht zu erhalten, während Aktualisierungen die Befehlsschnittstelle verwenden. Diese Befehlsobjekte unterstützen auch die Audit-Anforderungen und steuern das Domänenmodell.
Das Domänenmodell unterstützt jetzt nur noch einen einzigen Aspekt: die Validierung und Ausführung von Befehlen. Das Domänenmodell muss keine Abfragen mehr unterstützen, so dass Ihre Objekte nicht mehr viele Getter und Setter benötigen: Sagen, nicht fragen! Darüber hinaus kann das Domänenmodell jetzt mit einem für Aktualisierungen optimierten Datenspeicher wie Hypertable oder CouchDB gespeichert werden.
Für die Abfrageoberfläche kann eine leseoptimierte Datenbank verwendet werden, die durch Ereignisse aus dem Domänenmodell aktualisiert wird. Sie können diese Datenbank problemlos denormalisieren, ohne die Effizienz der Schreibvorgänge in Ihrem Domänenmodell zu beeinträchtigen. Darüber hinaus ist es jetzt möglich, diesen Nur-Lese-Speicher für eine extrem hohe Skalierbarkeit einfach zu replizieren.
In den nächsten Wochen werde ich die praktischen Auswirkungen dieses Ansatzes, die dafür erforderliche Infrastruktur und die möglichen Anwendungen, die davon profitieren könnten, untersuchen.