2

この記事では、「ドメイン イベント」と呼ばれる優れたパターンについて説明します: http://www.udidahan.com/2009/06/14/domain-events-salvation/

ただし、このパターンの大きな欠陥の 1 つが、ユーザー Andy によるコメント 27 で強調されています。トランザクションが失敗した場合、ドメイン イベントを実行したくありません。したがって、何らかのキューイングメカニズムを作成する必要があります。

残念ながら、これは、システムを簡素化するはずだった手法を大幅に複雑にするように思えます。

ドメインイベントのキューイングの良い例や議論、特にNHibernateとうまく統合されたソリューションを知っている人はいますか?

4

1 に答える 1

5

私はこれを行う方法を考え出しました: その秘密は、NHibernate の ITransaction の RegisterSynchronization メソッドです。

例として、トランザクションがコミットされた場合にのみ顧客に電子メールを送信する方法を次に示します。

public class NotifyCustomerEmail
{
    private void MailMessage { get; set; }

    public void SendAsyncOnceTransactionCommits()
    {
        if (MailMessage == null)
            ComposeMailMessage();

        NHibernateSessionManager
            .CurrentSession
            .Transaction
            .RegisterSynchronization(new SendEmailSynchronization(this.MailMessage));
    }
}
于 2011-07-26T01:40:29.850 に答える