it-swarm.com.de

DDD: Wo werden Domain Event Handler platziert?

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
Toni

Ich platziere Domain Event Handler in der Anwendungsschicht.

Das Domänenereignis ist eine Möglichkeit, den Außenschichten (oder der Außenwelt) mitzuteilen, dass in der Domänenschicht etwas passiert ist. Was mit dem Ereignis zu tun ist, hängt von der Anwendung ab. Die Anwendung benachrichtigt den Benutzer möglicherweise über Änderungen oder ruft eine andere Domäne an, um etwas zu tun. Die Anwendung ist für die Orchestrierung von Domänenvorgängen als Reaktion auf Benutzeraktionen, Webanforderungen oder Domänenereignisse verantwortlich.

12
Eugene Khudoy

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 RequestInvoice zu 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

2
diegosasw

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 in die 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 einen Ereignishandler erstellen. Check out hexagonale Architektur .

2
Gudmundur Orn