接口中的 void 方法是一种代码味道吗?

Is void method in interface a code smell?

我的意思是设计闻起来像时间耦合。 Void 方法在其签名中没有关于为什么以及何时应该调用它的情况的类型安全的严格描述。因此,这仅取决于文档。使用它是基于对副作用正确性的信念。

那么我们应该尝试摆脱接口中的 void 方法吗?

无效方法不是设计风格。

面向对象(与函数式编程不同)允许产生副作用,例如更改调用方法的对象的内部结构。这是正常的。

好不好是另一个问题。函数式编程在表现力上肯定更强大。可以编写几乎不可能被误用的代码(当它编译时它可以工作)。

此外,void 方法通常不会导致时间耦合。时间耦合意味着,必须有另一个方法 必须 在方法之前或之后调用,否则方法调用没有意义。

当然你必须知道方法调用的语义,换句话说,它意味着什么。这是意料之中的,对于具有相同签名的函数,函数式编程中也是如此。