質問
この記事では、「ドメインイベント」と呼ばれる素晴らしいパターンについて説明しています。 http://www.udidahan.com/2009/06/14/domain-events-salvation/
ただし、このパターンの1つの大きな欠陥は、ユーザーAndyによってコメント27で強調されています。トランザクションが失敗した場合、ドメインイベントを実行したくありません。したがって、何らかのキューイングメカニズムを作成する必要があります。
残念ながら、これはシステムを簡素化することになっているテクニックを大幅に複雑にするように聞こえます。
キューイングドメインイベントのいくつかの良い例や議論、特にNhibernateとうまく統合するソリューションを知っている人はいますか?
解決
私はこれを行う方法を説明しました:秘密は、Nhibernateの復活の登録施設方法です。
例として、トランザクションがコミットされた場合にのみ、顧客にメールを送信する方法は次のとおりです。
public class NotifyCustomerEmail
{
private void MailMessage { get; set; }
public void SendAsyncOnceTransactionCommits()
{
if (MailMessage == null)
ComposeMailMessage();
NHibernateSessionManager
.CurrentSession
.Transaction
.RegisterSynchronization(new SendEmailSynchronization(this.MailMessage));
}
}
所属していません StackOverflow