1

私は、開発者がドメイン駆動設計でアプリケーションを設計/構築する一般的な方法をたくさん研究してきました (まだ概念全体を理解しようとしています)。私が見たいくつかの例には、イベント アグリゲーターを介したイベントの使用が含まれていました。アプリケーションのさまざまな要素/ドメインを本当に分離したままにするため、このコンセプトが気に入りました。

私が懸念しているのは、エラーが発生した場合に操作をどのようにロールバックするかということです。

例えば:

注文をデータベースに保存し、注文のコピーを pdf として CMS に保存する必要がある注文アプリケーションがあるとします。アプリケーションは、新しい注文が作成されたことを示すイベントを発生させ、このイベントをサブスクライブする PDF サービスが PDF を保存します。一方、注文の変更をデータベースにコミットすると、例外がスローされます。問題は、pdf が保存されているが、一致するデータベース レコードではないことです。

以前に処理されたイベントをキャッシュし、「元に戻す」操作のためにキャッシュを参照する新しいエラー イベントを起動する必要がありますか? これにはコマンドパターンのようなものを使用しますか?

または...イベントアグリゲーターはこれに適したパターンではありません。

編集

イベントは、電子メールやログ記録など、「ミッション クリティカル」ではない項目に使用する必要があるのではないかと考え始めています。

最初に考えたのは、イベント アグリゲーター パターンを使用して依存関係を制限することでした。

4

2 に答える 2

2

データベースでの操作と同じトランザクションでイベントをコミットする必要があります。

この特定のシナリオでは、トランザクションに参加するキューにイベントをプッシュして、集計が永続化されない限りイベントが発生しないようにすることができます。これにより、PDF の結果整合性が作成されます。PDF の作成に失敗した場合は、問題を修正して、自動的に再試行することができます。

おそらく、RavenDB と IronMQ を使用した結果整合性ドメイン イベントに関する私の以前の投稿の 1 つで、より多くのインスピレーションを得ることができます。

于 2013-08-23T17:05:11.037 に答える