私たちのアプリケーションでは、ドメインモデルで何か変わったときにドメインイベントを発生させます。イベントハンドラによって実行されるタスクの一部は、イベント発生時に使用された同じトランザクション内で実行されなければならず、他のタスクはこのトランザクション外で実行されなければなりません。次に、例えばトランザクションの内部または外部でドメインイベントを発生させる必要がありますか?
、注文ラインをOrderエンティティに追加されると、OrderLineAddedドメインイベントが発生した
、一つのドメインイベントはドメインモデルの状態を変化させる(したがって、同じトランザクションで実行されなければなりません)、トランザクションが完了したら、UIを更新する必要があります。
どのようにこの問題にアプローチしますか?
- トランザクション内に1つ、トランザクション外に2つのイベントを発生させます。
- トランザクションの内部でイベントを発生させますが、イベントハンドラを使用してAsyncリクエストを送信してUIを更新しますか?
オプション1は、イベント名が何らかの形でトランザクション内外に伝達されなければならないので混乱しますが、オプション2のドメインイベントハンドラではトランザクション内から同期的に呼び出されると仮定する必要があります。
おそらくもっと良いアプローチがありますか?
これは素晴らしいソリューションのようですが、トランザクションイベントを非トランザクションイベントと区別するためにイベントの名前をどのように指定しますか? – Andronicus
私は実装されたインターフェースだけに頼っていました。命名規則はありませんでした。 –
@Szymon:それはしばらくしていますが、 "フック"とは[TransactionCompleted](http:// msdn。microsoft.com/en-us/library/system.transactions.transaction.transactioncompleted.aspx)イベントは、.NETの 'Transaction'クラスにありますか?例がありますか? – dstj