2015-11-02 58 views
2

數在我的web應用程序,我在頁面上跟蹤觀看次數。維護CQS當跟蹤查詢

眼下,在控制器的動作發出指令到數據層返回查詢結果之前,增加模型上的瀏覽次數。

這個動作似乎打破命令查詢分離的規則,因爲與請求的用戶代理提交查詢不知不覺地發出命令(以增加觀看次數)

什麼架構決策需要採取在這個行動中維護命令 - 查詢 - 分離?

+0

我嚴重懷疑是否增加觀看計數應被視爲一個命令。 – venerik

回答

1

你應該考慮CQS相對於有問題的操作的概念層面。下面是一些例子,似乎都違背CQS,但僅適用於不同的概念層次這麼做

  • 一個ReadFile調用文件系統對象上不修改文件 - 但它canupdate上次訪問時間戳在文件上。
  • 一個FindById調用存儲庫不應更改數據庫 - 但它可以被查詢對象非常好添加到緩存中。
  • 對REST API的GET操作不應更改模型 - 但它可以更新統計數據。

這些示例有一個共同點:它們保持客戶端工作的狀態爲model,但它們確實修改了該模型之外的數據。 這並不違反CQS。

另一種方式看,這是通過principle of least surprise。上面提到的REST API的客戶端不會期望模型隨GET請求而改變,但他不關心API是否更新統計計數器。

+0

並且每個Web請求都可能導致數據寫入日誌文件 –