實現域事件時,應該僅將事件處理程序用於純粹的域關注;你會與業務專家討論的東西,還是他們開放供任何對域模型感興趣的東西使用?域事件處理程序 - 它們是否應用於應用程序層問題?
這很可能是最好的解釋一個簡單的例子,考慮日曆應用程序爲員工安排工作。
我們可能有以下域事件中......
AppointmentAdded AppointmentRemoved AppointmentContentChanged AppointmentMoved
我們對這些事件處理程序,例如,當一個約會移動到時候員工之外工作時間我們設置了警告標誌。
當然有對這些事件感興趣的應用顧慮,例如,當約會被添加到日曆中時,我們應該將其添加到工作單元中,以便稍後可以進行更改。
這些應用程序是否應該擔心域事件的消費者,還是應該引發和處理單獨的系統事件?
這聽起來很合理,但它引發了一個關於何時提升域事件的新問題。比方說,在一個事務中執行向日歷添加預約,將實體添加到UnitOfWork必須在事務中執行,但更新UI必須在事務之外執行。在這種情況下,域名事件是否應該在交易中提出?並且UI更新應該在另一個域事件處理程序中完成,它是否工作異步。 – Andronicus 2011-01-14 13:25:13
域事件代表已發生的事情。所以應該沒有能力在事件處理程序中回滾事務。提交事務,然後調用事務處理程序來處理事務中發送的所有事件 – 2011-01-14 15:07:26