求兼具对象操作与返回值的函数称谓(附C# MoveNext()示例)
命令查询混合方法(Command-Query Hybrid)
嘿,你找的应该就是这个术语!这种既修改对象内部状态(执行命令类操作)又返回结果(执行查询类操作)的函数/方法,被称为命令查询混合方法(Command-Query Hybrid)——它刚好是对经典的**命令查询分离(Command-Query Separation, CQS)**设计原则的违背。
先简单解释下CQS原则:这是Bertrand Meyer提出的编程设计原则,核心是把方法严格分成两类:
- 命令(Command):只负责修改对象的状态,不返回任何值(比如C#里的
void方法) - 查询(Query):只负责返回数据结果,不会修改对象的任何状态
你提到的IEnumerator.MoveNext()就是个典型的混合案例:它一方面修改了枚举器内部的指针位置(属于命令行为),另一方面又返回bool值告诉你是否存在下一个元素(属于查询行为),把两种职责合并在了一个方法里。
值得一提的是,虽然CQS能让代码职责更清晰、更易维护,但这种混合方法在不少场景下是合理的选择——比如MoveNext()如果拆成两个独立方法(一个推进指针的命令,一个判断是否有下一个的查询),不仅会让API变得繁琐,还可能因为两次调用之间的状态变化导致结果不一致,所以很多成熟框架都会保留这类设计。
内容的提问来源于stack exchange,提问作者LifGwaethrakindo
相关产品推荐
相关产品推荐

