Können Sie mir Ihre Meinung sagen, welche Ebene die richtige ist, um Domain-Event-Handler in DDD zu platzieren? Ich habe beispielsweise einen Anwendungsdienst zum Hinzufügen eines neuen Vertrags und möchte eine E-Mail-Benachrichtigung an die Kontaktperson senden, wenn der Vertrag hinzugefügt wurde. Dies gilt auch für den Anwendungsdienst oder den Domänendienst des E-Mail-Absenders (der das Ereignis ContractAdded behandelt) oder etwas anderes?
13
Das ursprüngliche DDD-Buch (Evans 2004) erklärt die Anwendungsschicht als eine dünne Schicht, die Domänenobjekte als Reaktion auf die Aktion des Benutzers ausübt. Typische Ereignishandler für Domänenereignisse gehören daher nicht zur Anwendungsschicht.
Es kann sinnvoll sein, einige davon in der Domänenschicht zu platzieren, solange Sie die Schicht nicht durch Erstellen einer Abhängigkeit nach oben unterbrechen.
Wenn Sie eine Infrastrukturschicht haben, die sich unterhalb der Domänenschicht befindet, kann der Ereignishandler nicht vorhanden sein, da dies die Schichtung unterbrechen würde.
Wenn Sie eine Adapterschicht haben, die sich über der Domänenschicht befindet, können Sie dort eine Ereignisbehandlungsroutine erstellen. Schauen Sie sich die hexagonale Architektur an .
quelle
Ich platziere Domain Event Handler in der Domain-Ebene als Domain-Schnittstelle
IDomainEventHandler
.Ein Beispiel für einen Domänenereignishandler ist eine Richtlinie, die ein bestimmtes Domänenereignis abonniert, um eine neue Transaktion zu initialisieren (z. B. um einen neuen Domänenbefehl auszulösen). Daher ist es sinnvoll, sie in der Domänenschicht zu haben, da sie mit dieser verbunden ist Geschäftslogik.
Wir könnten uns ein Beispiel vorstellen, bei dem eine Bestellung bestätigt wird und daher eine Rechnungsanforderung erstellt werden sollte. Wir haben ein Ereignis
OrderConfirmedEvent
, das passiert ist. Eine Richtlinie in unserer Domäne ist dafür verantwortlich, dieses Ereignis zu abonnieren und einen Domänenbefehl zuRequestInvoice
erstellen, der vom Befehlshandler verarbeitet und entsprechend behandelt wird.Wenn wir diesen Ereignishandler in der Anwendungsschicht hätten, würde dies bedeuten, dass die Anwendungsschicht zusätzlich zur Orchestrierung der Benutzeraktionen eine Geschäftslogik ausführen würde, was falsch erscheint.
Wir haben es jedoch
quelle