有讀者來信詢問關於INotification使用時機,以及為什麼不直接全部使用IRequestHandler就好,看了一下之前的文章,應該是表達得不夠清晰,稍微再補充一下。

INotification

使用時機:

特點:

IRequestHandler主要差別總結:

  1. 返回值:IRequestHandler 返回結果,INotification 不返回結果。
  2. 處理程序數量:IRequestHandler 是一對一的關係,INotification 是一對多的關係。
  3. 用途:IRequestHandler 用於請求 - 響應模式,INotification 用於發布 - 訂閱模式。
  4. 執行方式:IRequestHandler 只執行一個處理程序,INotification 執行所有相關的處理程序。

範例

INotification本身是一種EventBus的概念,並不會回傳結果,相當適用於我們執行一項命令後,希望執行一些後續處理,而這些處理不一定要包含在我們當前的上下文中,這樣可以將每種執行邏輯獨立分開。例如我們註冊會員後,還有一些想執行的程序,如寄送會員成功註冊信、新會員註冊購物金等

  1. 一般以EventNotification為結尾
internal record UserRegisteredNotification : INotification
{
    public string Email { get; init; } = null!;
}

// OR
internal record UserRegisteredEvent : INotification
{
    public string Email { get; init; } = null!;
}
  1. 可以多個事件,並且每個事件獨立運作