私は、開発者がドメイン駆動設計でアプリケーションを設計/構築する一般的な方法をたくさん研究してきました (まだ概念全体を理解しようとしています)。私が見たいくつかの例には、イベント アグリゲーターを介したイベントの使用が含まれていました。アプリケーションのさまざまな要素/ドメインを本当に分離したままにするため、このコンセプトが気に入りました。
私が懸念しているのは、エラーが発生した場合に操作をどのようにロールバックするかということです。
例えば:
注文をデータベースに保存し、注文のコピーを pdf として CMS に保存する必要がある注文アプリケーションがあるとします。アプリケーションは、新しい注文が作成されたことを示すイベントを発生させ、このイベントをサブスクライブする PDF サービスが PDF を保存します。一方、注文の変更をデータベースにコミットすると、例外がスローされます。問題は、pdf が保存されているが、一致するデータベース レコードではないことです。
以前に処理されたイベントをキャッシュし、「元に戻す」操作のためにキャッシュを参照する新しいエラー イベントを起動する必要がありますか? これにはコマンドパターンのようなものを使用しますか?
または...イベントアグリゲーターはこれに適したパターンではありません。
編集
イベントは、電子メールやログ記録など、「ミッション クリティカル」ではない項目に使用する必要があるのではないかと考え始めています。
最初に考えたのは、イベント アグリゲーター パターンを使用して依存関係を制限することでした。