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/