command-query-separation - 为什么CQS原则要求Command不返回任何值?

标签 command-query-separation

CQS 原则指出每个方法要么是执行操作的命令,要么是将数据返回给调用者的查询,但不能同时是两者。 Query 不执行任何其他操作是有意义的,因为您不希望查询更改状态。 但如果 Command 返回一些额外的信息,它看起来是无害的。您可以使用返回值或忽略它。为什么 CQS 原则要求 Command 不返回任何值?

最佳答案

But it looks harmless if a Command returns some extra piece of information?

经常是这样。有时不是。

人们可能会开始混淆对命令的查询,或者调用命令更多地是为了它返回的信息而不是它的效果(以及防止效果成为真实效果的“聪明”方法,这可能很脆弱)。

它会导致界面出现空白。如果人们可以设想的特定查询的唯一用例是与特定命令一起使用,那么添加纯形式的查询似乎毫无意义(例如,用 Pop()< 编写堆栈 但没有 Peek()),这会限制组件在面对 future 更改时的灵 active 。

在某种程度上,“看起来无害”正是 CQS 在禁止此类结构时警告您的。

现在,这并不是说您可能仍然认为特定的命令-查询组合没有那么有用而不值得,但是在权衡这种决定的利弊时,CQS 始终是反对它的声音。

关于command-query-separation - 为什么CQS原则要求Command不返回任何值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26902137/

相关文章:

java - Spring - 将自定义实例传递给构造函数

asp.net-mvc - 从命令运行查询是否违反了命令-查询分隔?

c# - 返回任务是否违反了 CQS 原则?

design-patterns - 如何识别一个项目是否使用了 CQS 或 CQRS? CQS 和 CQRS 有什么区别?

wcf - WPF 客户端 - 我应该在后台线程中调用 WCF 服务吗?

c# - 在 MVC Controller 中使用命令查询分离原则

c# - 单功能类(命名为动词)

oop - 在对域建模时是否应该考虑规则 "one transaction per aggregate"?

c# - 事件溯源基础设施实现