2015-11-02 53 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请求都可能导致数据写入日志文件 –