[英]CQRS - Multiple command/query-handlers inside eachother
在 CQRS 中相互使用多個查詢處理程序和/或命令處理程序是一個好習慣嗎? 或者你應該每個用例只有一個?
CQRS 是一種應用單一職責原則的架構模式,它通過提供兩個模型(讀取和寫入模型)而不是一個模型來將查詢與命令處理分開。 因此,如果您在彼此中使用多個查詢處理程序和/或命令處理程序,這將是對模式的錯誤使用。
如果讀取次數非常多,則此模式可讓您進行擴展。 因此,它也不是應用於系統的所有有界上下文的架構模式。
不,我不這么認為。
這是一種不好的做法,因為這種方式忽略了 CQRS 的兩個主要優點。 首先是簡單的代碼支持和清晰的結構,因為您已經分離了業務邏輯和查詢(用於可視化的聚合數據)。
第二個優勢是規模化。 一個實例處理命令,另外 5 個實例處理請求。 所以理論上命令代碼和查詢可以在不同的服務器上執行。 類似地,不同的查詢可能會在不同的服務器上執行,因此包括命令代碼和相互查詢的代碼是個壞主意——擴展將是一個巨大的痛苦。
一些 CQRS 庫事件在不同的包中分離 C&Q 端,例如這里。
壞主意。 如果處理程序必須做很多事情,例如調用不同的數據庫、第 3 方、外部文件等,那么它應該將其委托給其他人,例如存儲庫等。
為什么要在命令處理程序中包含查詢處理程序? 在創建命令之前查詢數據,並用域的所有相關信息填充命令以執行它。
另一方面,在查詢處理程序中包含命令處理程序聽起來非常危險,因為您正在突破將讀取與寫入分開的相當重要的原則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.