2011-07-25 52 views
2

本文介紹了所謂的「域事件」一個偉大的格局:http://www.udidahan.com/2009/06/14/domain-events-salvation/排隊域事件

這種模式不過是評論27用戶安迪強調的一個重大缺陷:如果交易失敗,我們不希望我們的域名事件執行。因此,我們需要創建某種排隊機制。

不幸的是,這聽起來像是要大量複雜化本來應該簡化系統的技術。

有誰知道排隊域事件的一些很好的例子或討論,特別是與NHibernate集成的解決方案嗎?

+0

的[凡提高持久性依賴域事件可能重複 - 服務,庫,或UI?](http://stackoverflow.com/questions/5886174/where-to-raise-persistence-dependent-domain-events-service-repository-or-ui) – cbp

回答

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)); 
    } 
} 
+0

正在思考同一條線,但是你的方法是清潔器 –