2012-08-10 81 views
2

我有一個功能,我試圖使用NServiceBus實現,但不確定這裏使用的模式。 (我是相當新的NServiceBus)鏈接事件/命令?

我會盡力解釋在我的不確定性來自於:

用戶交互觸發MVC控制器發送命令來執行域操作。該命令引發一個事件來通知其他人發生了這種情況。

訂閱此事件的處理程序確定是否應該發生另一個域操作。

這是我不清楚要遵循的正確模式。此時應該事件處理程序:

  • 只需進行所需更改?
  • 發送一個新的命令來做到這一點?如果是這樣,請將其發送回始發服務/流程?
  • 另一種選擇?

我的一部分想知道是否應該使用進程內事件來處理這個事件,但我不認爲第一個命令在返回前應該等待第二個命令。事實上,它可能會晚得多。這就是爲什麼我使用公共汽車來處理異步的原因。另外,第二次操作完成後需要生成電子郵件。是否應該從另一個事件/命令觸發?

任何和所有指導讚賞。

+0

因爲還沒有答案 - 你能用具體的名字來描述問題領域嗎? – 2012-08-10 09:33:41

回答

3

如果不需要等待第二個動作,那麼是的,它應該是異步完成的,因此第一個命令的處理應該發佈一個NServiceBus事件。該事件的處理程序將(可能)被託管在一個單獨的端點中,然後該端點就可以完成這項工作 - 不需要在那裏發送另一個命令。

+0

因此,如果事件處理程序可以修改域狀態,那麼我認爲它也可以發佈更多的事件。我想我正在努力是否NServiceBus端點應該代表一個有界的上下文或應用程序/基礎設施進程。或根據需要組合。 – 2012-08-10 12:57:04

+0

是的 - 事件處理程序「修改域狀態」作爲其工作的一部分是完全正確的。 – 2012-08-11 15:36:30

1

要添加到Udi的答案,我只會回頭併發送一個命令回到始發服務,如果始發端點上的服務真的是應該對該命令的行爲負責的那個。否則,接收事件的服務(端點)應該只是做它響應事件所需要做的事情(這聽起來像你的情況)。