Wer sollte für die Verarbeitung von Domänenereignissen verantwortlich sein? Anwendungsdienste, Domain-Services oder Entitäten selbst?In DDD, wer sollte für die Behandlung von Domain-Events verantwortlich sein?
Lassen Sie uns ein einfaches Beispiel für diese Frage verwenden.
Nehmen wir an, wir arbeiten an der Shop-Anwendung, und wir haben einen Anwendungsservice für Bestellvorgänge. In dieser Anwendung Order
ist eine aggregierte Wurzel und folgende Regeln, wir können nur mit einem Aggregat innerhalb einer einzigen Transaktion arbeiten. Nachdem die Bestellung aufgegeben wurde, wird sie in einer Datenbank gespeichert. Aber es gibt noch mehr zu tun. Zuerst müssen wir die Anzahl der im Inventar verfügbaren Artikel ändern und zweitens einen anderen Teil eines Systems (wahrscheinlich einen anderen beschränkten Kontext) benachrichtigen, dass der Versandvorgang für diesen bestimmten Auftrag gestartet werden sollte. Da, wie bereits erwähnt, nur ein Aggregat innerhalb einer Transaktion geändert werden kann, denke ich über die Veröffentlichung OrderPlacedEvent
nach, die von einigen Komponenten in den separaten Transaktionen verarbeitet wird.
Frage: Welche Komponenten sollten mit dieser Art von Ereignis umgehen?
Danke für die Antwort. In Bezug auf die Haltbarkeit - ich weiß noch nicht, wie man es organisiert. Ich denke, im Idealfall sollten wir zwei Transaktionen haben und eine dauerhafte Warteschlange (JMS?) - Ereignis wird innerhalb der gleichen Transaktion veröffentlicht und so stellen wir sicher, dass es ordnungsgemäß zugestellt wurde und die andere Transaktion gestartet wird, wenn die Nachricht aus der Warteschlange abgeholt wird. Auf diese Weise können wir sicherstellen, dass das Ereignis erneut zugestellt wird, wenn etwas schief geht –