Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 跟踪查询数量时维护CQS_C#_Asp.net Mvc_Architecture_Command Query Separation - Fatal编程技术网

C# 跟踪查询数量时维护CQS

C# 跟踪查询数量时维护CQS,c#,asp.net-mvc,architecture,command-query-separation,C#,Asp.net Mvc,Architecture,Command Query Separation,在我的web应用程序中,我跟踪页面的浏览次数 现在,控制器中的操作向数据层发出命令,在返回查询结果之前增加模型上的视图计数 此操作似乎打破了命令-查询分离的规则,因为用户代理通过请求提交查询并无意中发出命令(以增加视图计数) 在这个动作中,需要用什么架构决策来维护命令查询分离? ,您应该考虑CQS相对于所涉及操作的概念级别。以下是一些似乎都违反CQS的示例,但仅在不同的概念层面上这样做: 对文件系统对象的ReadFile调用不会修改文件,但它可以更新文件上上次访问的时间戳 对存储库的FindB

在我的web应用程序中,我跟踪页面的浏览次数

现在,控制器中的操作向数据层发出命令,在返回查询结果之前增加模型上的视图计数

此操作似乎打破了命令-查询分离的规则,因为用户代理通过请求提交查询并无意中发出命令(以增加视图计数)


在这个动作中,需要用什么架构决策来维护命令查询分离?

,您应该考虑CQS相对于所涉及操作的概念级别。以下是一些似乎都违反CQS的示例,但仅在不同的概念层面上这样做:

  • 对文件系统对象的
    ReadFile
    调用不会修改文件,但它可以更新文件上上次访问的时间戳
  • 对存储库的
    FindById
    调用不应更改数据库,但它可以很好地将查询的对象添加到缓存中
  • RESTAPI上的GET操作不应更改模型,但它可以更新统计数据
这些示例有一个共同点:它们维护客户机处理的
模型的状态,但它们确实修改了该模型之外的数据这并不违反CQS。


另一种方法是通过。上述REST API的客户端不希望模型随GET请求而更改,但他不在乎API是否更新了统计计数器。

我严重怀疑是否应将增加视图计数视为一个命令。并且每个web请求都可能导致数据写入日志文件