Ich habe die folgende Architektur: Ofc. Es gibt Ports und Adapter und alles andere, was du dir vorstellen kannst ...
Was schlagen Sie vor, wie man eine Ruheantwort durch sofortige Konsistenz sendet? Sollte ich einen weiteren Event-Bus hinzufügen und eine Veranstaltung auslösen? (Ich denke, die Projektion muss etwas über den Erfolg aussenden.)
Wie werden Fehler in einem ereignisbasierten System wie diesem behandelt? (Der Ereignisbus ist nicht notwendig, ich kann lose Kopplung mit einem IoC-Container lösen, aber ich denke nicht, dass das Senden eines Rückrufs durch so viele Objekte eine gute Lösung wäre.)
Es ist nicht schwer, anstatt einen Befehl zu senden, können Sie den Befehlshandler direkt vom Controller aufrufen. Oder haben Sie eine Service-Methode, die die Eingabe verarbeitet und etwas zurückgibt. Das Wichtigste ist, dass alle diese synchron ausgeführt werden (d. H. Sie müssen warten, bis der Handler fertig ist). Die Domänenereignishandler sind davon nicht betroffen, sie können asynchron sein.
Wenn Sie nicht "hybrid" gehen und immer den gleichen Workflow verwenden möchten (wie in Ihrem Bild beschrieben), sind die Dinge komplizierter. Sie müssen den Client oft prüfen lassen, ob der Vorgang abgeschlossen ist. Ich denke, der bessere Weg ist flexibel zu sein, für einige Aufgaben kann man die "alten" Wege benutzen. Die Domänenereignisse werden weiterhin generiert und behandelt, dieser Teil würde sich nicht ändern. Sie ändern nur die Art, wie ein Befehl ausgeführt wird.
Es ist auch erwähnenswert, dass Sie keine Antworten von Event-Handlern erwarten sollten und wenn Sie sich besser fühlen, verwenden Sie die 'request-response'-Terminologie anstelle von Kommando-Antwort.
Übrigens, Sie brechen CQRS nicht auf diese Weise, solange Ihr Domänenmodell nicht für Abfragen verwendet wird, d. h. Sie haben ein anderes Modell für Schreib- und Lesevorgänge, es ist CQRS.
Unmittelbare Konsistenz, zu welchen Kosten? verwenden Sie DTC?
Was ist, wenn Sie später mehr als einen Abonnenten für ein bestimmtes Ereignis im Lesemodell haben möchten? Wie viele Transaktionen werden in einen DTC-Transaktionsbereich involviert? Damit Sie sofort konsistent sind, müssen Ihre Ereignisse synchron behandelt werden. Was bringt also diese Architektur?
Sie können unmittelbare Konsistenz und sogar sofortige Benutzerbenachrichtigungen mit Client-Callback (signalR) haben, aber IMHO sollten Sie einige Dinge in Ihrer Architektur ändern, beginnend mit dem Ablegen des unmittelbaren Konsistenz-Bits.
Warum denkst du, dass du das btw brauchst?
Tags und Links rest architecture event-sourcing event-store cqrs