设计一个返回值或更改某些数据的方法,但不能同时返回值和更改某些数据



我隐约记得不久前在某个地方读到,方法/函数应该在不修改状态的情况下返回值,或者应该处理一些更改状态但不返回数据的数据。它超越了简单的getter和setter。

我不知道我在哪里读到的,理由,以及这是否是一个合理的原则。当然,测试可能更简单,但还有其他原因吗?是否有相关的设计原则或模式?感谢任何线索或链接。

谢谢Olivier

该原理称为命令-查询分离

来自维基百科:

命令-查询分离(CQS(是命令式计算机编程的一个原理。它是由Bertrand Meyer设计的,是他在Eiffel编程语言方面开创性工作的一部分。

它指出,每个方法要么是执行操作的命令,要么是向调用方返回数据的query。换句话说,提问不应改变答案。更正式地说,只有当方法是参照透明的,因此没有副作用时,它们才应该返回值。

就我个人而言,我认为这个原则非常有用。它基于一个常见的观察结果:当我们看到一个返回一些数据的函数时,我们倾向于认为它不会改变任何数据状态。换句话说,该函数没有任何副作用。相反,具有副作用的函数被认为是"函数";危险的";因此应该具有明确的指示(返回void类型(。您可以看到,C#有Properties的概念,在这里您可以通过使用赋值符号来更改属性的状态,这比setter方法更能指示属性的状态。

总之,CQS原理有助于我们的代码更容易阅读和推理,因为管理状态变化在编程中至关重要。

你可以在维基百科的文章中找到更多有用的链接,还有这个和这个。

最新更新