數在我的web應用程序,我在頁面上跟蹤觀看次數。維護CQS當跟蹤查詢
眼下,在控制器的動作發出指令到數據層返回查詢結果之前,增加模型上的瀏覽次數。
這個動作似乎打破命令查詢分離的規則,因爲與請求的用戶代理提交查詢和不知不覺地發出命令(以增加觀看次數)
什麼架構決策需要採取在這個行動中維護命令 - 查詢 - 分離?
數在我的web應用程序,我在頁面上跟蹤觀看次數。維護CQS當跟蹤查詢
眼下,在控制器的動作發出指令到數據層返回查詢結果之前,增加模型上的瀏覽次數。
這個動作似乎打破命令查詢分離的規則,因爲與請求的用戶代理提交查詢和不知不覺地發出命令(以增加觀看次數)
什麼架構決策需要採取在這個行動中維護命令 - 查詢 - 分離?
你應該考慮CQS相對於有問題的操作的概念層面。下面是一些例子,似乎都違背CQS,但僅適用於不同的概念層次這麼做:
ReadFile
調用文件系統對象上不修改文件 - 但它canupdate上次訪問時間戳在文件上。FindById
調用存儲庫不應更改數據庫 - 但它可以被查詢對象非常好添加到緩存中。這些示例有一個共同點:它們保持客戶端工作的狀態爲model
,但它們確實修改了該模型之外的數據。 這並不違反CQS。
另一種方式看,這是通過principle of least surprise。上面提到的REST API的客戶端不會期望模型隨GET請求而改變,但他不關心API是否更新統計計數器。
並且每個Web請求都可能導致數據寫入日誌文件 –
我嚴重懷疑是否增加觀看計數應被視爲一個命令。 – venerik