c# - 在跟踪查询数量时维护 CQS

标签 c# asp.net-mvc architecture command-query-separation

在我的网络应用程序中,我正在跟踪页面的查看次数。

现在, Controller 中的操作向数据层发出命令以在返回查询结果之前增加模型上的 View 计数。

此操作似乎违反了命令-查询-分离的规则,因为随着请求,用户代理正在提交查询无意中发出命令(以增加查看计数)

需要采取哪些架构决策来维持此操作中的命令-查询-分离?

最佳答案

您应该考虑与相关操作的概念级别相关的 CQS。以下是一些似乎都违反了 CQS 的示例,但只是在不同的概念层面上:

  • 对文件系统对象的 ReadFile 调用不会修改文件 - 但它可以更新文件上最后访问的时间戳。
  • 对存储库的 FindById 调用不应更改数据库 - 但它可以很好地将查询的对象添加到缓存中。
  • REST API 上的 GET 操作不应更改模型 - 但它可以更新统计数据。

这些示例有一个共同点:它们维护客户端工作的 model 的状态,但它们会修改该模型之外的数据。 这并不违反 CQS。

另一种查看方式是通过 principle of least surprise .上述 REST API 的客户端不希望模型随着 GET 请求而改变,但他不关心 API 是否更新统计计数器。

关于c# - 在跟踪查询数量时维护 CQS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33486031/

相关文章:

c# - 将对象列表保存到 XML 文件并使用 C# 加载该列表的最佳方法是什么?

c# - 有没有办法在不重复变量名的情况下对单个变量应用多个逻辑运算符?

javascript - 根据 ViewBag 值运行 JavaScript block

database - 结合使用关系数据库和键值存储

c# - 在 wpf 应用程序中捕获 Windows 关闭事件

c# - 同时运行两个winform窗口

asp.net-mvc - MVC - 使用 Windows 身份验证并注入(inject)角色而不按请求执行

asp.net-mvc - ServiceStack 如何在 MyController<T> 上 Autowiring 自定义 IRepository<T> 属性

javascript - Redux 和 Angular 2

java - 订阅数据馈送的多个并发用户的设计和架构