Zusätzlich zu allen hier offengelegten Antworten kann ein Ereignishandler möglicherweise auch einen Befehl auslösen, nachdem er eine Benachrichtigung über das Auftreten eines Ereignisses erhalten hat.
Angenommen, Sie möchten nach dem Erstellen eines Kunden auch einige Kontenwerte usw. initialisieren. Nachdem Ihr Kunden-AR das Ereignis zum EventDispatcher hinzugefügt hat und dieses von einem CustomerCreatedEventHandler-Objekt empfangen wird, kann dieser Handler einen Versand eines Befehls auslösen, der führt alles aus, was Sie brauchen, etc.
Es gibt auch DomainEvents und ApplicationEvents. Der Unterschied ist einfach konzeptionell. Sie möchten zuerst alle Ihre Domänenereignisse auslösen (einige von ihnen können Anwendungsereignisse erzeugen). Was meine ich damit?
Das Initialisieren eines Kontos nach dem Auftreten eines CustomerCreatedEvent ist ein DOMAIN-Ereignis. Das Senden einer E-Mail-Benachrichtigung an den Kunden ist ein Anwendungsereignis.
Der Grund, warum Sie sie nicht mischen sollten, ist klar. Wenn Ihr SMTP-Server vorübergehend außer Betrieb ist, bedeutet dies nicht, dass Ihr DOMAIN-BETRIEB davon betroffen sein sollte. Sie möchten weiterhin einen nicht beschädigten Status Ihrer Aggregate beibehalten.
Normalerweise füge ich meinem Dispatcher Ereignisse auf der Ebene des aggregierten Stamms hinzu. Diese Ereignisse sind entweder DomainEvents oder ApplicationEvents. Kann beides sein und kann viele von ihnen sein. Sobald mein Befehlshandler fertig ist und ich wieder im Stapel zu dem Code bin, der den Befehlshandler ausführt, überprüfe ich meinen Dispatcher und versende jedes andere DomainEvent. Wenn all dies erfolgreich ist, schließe ich die Transaktion ab.
Wenn ich Anwendungsereignisse habe, ist dies die Zeit, diese zu versenden. Das Senden einer E-Mail erfordert nicht unbedingt eine offene Verbindung zu einer Datenbank oder einen offenen Transaktionsbereich.
Ich bin ein wenig von der ursprünglichen Frage abgewichen, aber es ist auch wichtig, dass Sie verstehen, wie Ereignisse auch konzeptionell anders behandelt werden können.
Dann haben Sie Sagas ... aber das ist WAYYYY OFF vom Umfang dieser Frage :)
Macht das Sinn?