簡體   English   中英

CQRS - 彼此內部的多個命令/查詢處理程序

[英]CQRS - Multiple command/query-handlers inside eachother

在 CQRS 中相互使用多個查詢處理程序和/或命令處理程序是一個好習慣嗎? 或者你應該每個用例只有一個?

  • 命令處理程序中的命令處理程序
  • 命令處理程序中的查詢處理程序
  • 查詢處理程序中的查詢處理程序
  • 查詢處理程序中的命令處理程序 -> 就我個人而言,我不會這樣做,因為您不會期望查詢應該更改數據...對嗎?

CQRS 是一種應用單一職責原則的架構模式,它通過提供兩個模型(讀取和寫入模型)而不是一個模型來將查詢與命令處理分開。 因此,如果您在彼此中使用多個查詢處理程序和/或命令處理程序,這將是對模式的錯誤使用。

如果讀取次數非常多,則此模式可讓您進行擴展。 因此,它也不是應用於系統的所有有界上下文的架構模式。

不,我不這么認為。

這是一種不好的做法,因為這種方式忽略了 CQRS 的兩個主要優點。 首先是簡單的代碼支持和清晰的結構,因為您已經分離了業務邏輯和查詢(用於可視化的聚合數據)。

第二個優勢是規模化。 一個實例處理命令,另外 5 個實例處理請求。 所以理論上命令代碼和查詢可以在不同的服務器上執行。 類似地,不同的查詢可能會在不同的服務器上執行,因此包括命令代碼和相互查詢的代碼是個壞主意——擴展將是一個巨大的痛苦。

一些 CQRS 庫事件在不同的包中分離 C&Q 端,例如這里

壞主意。 如果處理程序必須做很多事情,例如調用不同的數據庫、第 3 方、外部文件等,那么它應該將其委托給其他人,例如存儲庫等。

為什么要在命令處理程序中包含查詢處理程序? 在創建命令之前查詢數據,並用域的所有相關信息填充命令以執行它。

另一方面,在查詢處理程序中包含命令處理程序聽起來非常危險,因為您正在突破將讀取與寫入分開的相當重要的原則。

暫無
暫無

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

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