簡體   English   中英

在CQRS模式中,應該在域服務或命令處理程序中運行

[英]In CQRS pattern, should work go in domain services or command handlers

域服務是否應該注入其他域服務並在彼此之間工作,並使命令處理程序變得愚蠢。 或者,域服務應該是愚蠢的(僅用於連接存儲庫障礙),而大部分工作都在命令處理程序中完成? 什么是最佳做法...

我想說的是,將所有業務邏輯添加到域對象(如果功能不適合對象,還可以添加域服務),並對以下內容使用命令處理程序:

  • 實例化域對象並在其上運行方法,
  • 在域服務上運行方法,
  • 提供對域對象的依賴關系,
  • 管理數據庫交易,
  • ...

您可以檢查一下洋蔥體系結構 ,我想您的域服務在域模型中,而命令處理程序在應用程序服務中。

CommandHandlers可以看作是應用程序的用例,因此,它們的功能是協調對存儲庫,域服務和域模型的訪問。

如果您開始在彼此內部注入域服務,那么您將開始將它們耦合在一起,並失去彼此的單一責任。

我的答案是讓commandHandler處理用例中所需的域服務和模型的執行,這樣,您就可以自由地編寫任何新命令,而不必處理充滿用例邏輯的域服務。 ,並且不完全屬於域本身。

如果您的1個服務依賴於其他服務,則表明您犯了一些設計錯誤。 在這種情況下,您只想共享的代碼就是其他共享類庫,以便兩個服務都可以使用它們而彼此之間沒有任何依賴性

我不建議將所有邏輯都注入命令處理程序中,無法從域類之外設置域的許多部分,所以我建議僅在命令處理程序中編寫工作遵循和業務邏輯(而不是核心)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM