2013-08-07 8 views
6

Ich frage mich, ob es besser ist, Ereignisse zu veröffentlichen, anstatt Ausnahmen von Aggregaten zu werfen. Angenommen, ich habe eine Domain, in der nur Schüler einer bestimmten Klassenstufe sich für Sport anmelden können. Wenn das Aggregat EnrollForSports für einen Studenten aufruft, der die Kriterien nicht erfüllt, sollte das Aggregat eine Ausnahme auslösen oder ein Ereignis veröffentlichen, insbesondere wenn andere Aggregate oder Prozessmanager am Ergebnis des Prozesses interessiert sind?CQRS - Domain-Ausnahmen vs Ereignisse für außergewöhnliche Szenarien

Wenn ein Ereignis veröffentlicht wird, bedeutet dies nicht, dass ein entsprechender interner Event-Handler erforderlich ist, um das Ereignis bei der Wiedergabe zu behandeln, obwohl das Ereignis den Status des Aggregats nicht ändert?

Wenn eine Ausnahme ausgelöst wird, wie werden die anderen Parteien benachrichtigt? Kann der Command-Handler die Ausnahme abfangen und dann ein Ereignis auslösen? Können Ereignisse von Befehlsroutinen ausgelöst werden?

Antwort

5

Grundsätzlich sollte ein Befehl entweder gültig und ausgeführt oder ungültig und nicht ausgeführt werden. Die Idee mit Laichfehlerereignissen lässt Sie irgendwo in der Mitte und die Rückmeldung an wen auch immer sendet den Befehl ist mehrdeutig und verzögert. Es ist auch eine unnötige Komplexität in Ihrer Domäne. Wenn Sie eine Ausnahme auslösen, wird dies als unmittelbare Rückmeldung an den Client-Code gesendet, der den Befehl gesendet hat.

+5

Das unmittelbare Feedback wird natürlich nur funktionieren, wenn die Ausnahme synchron ausgelöst wird, nicht irgendwo auf der ganzen Linie eines komplexen Saga oder Prozess-Manager eine nachfolgende Kaskade zu schaffen von Ereignissen und Befehlen. –