便利功能是一种良好的做法吗

Are convenience functions a good practice?

本文关键字:一种 功能      更新时间:2023-10-16

我正在编写一个C++项目,并正在考虑对一些函数进行编码,这些函数总是具有相同的参数和相同的输出,而且不同的(不相关的)类将使用它们。但我现在很不情愿,因为我觉得这样的"方便"函数并不像它应该的那样OOP,我应该为这些函数编写一个最小的类。那么,从C++的角度来看,方便函数是一种很好的面向对象编程实践吗?这是一个糟糕设计的标志吗?

举例说明:

假设我们有两个类,class Sphereclass Pillow。由于某些(可能不同)哈希原因,Bot有一个成员变量char[8] hash,但总是使用相同的哈希算法。现在我有三个选择:

  • 为每个类实现成员函数makeHash()
  • 实现类调用的方便函数makeHash()
  • 重构完整的设计,使SpherePillow成为同一父类的子类

我不喜欢第一个选项,因为它会创建重复的代码,也不喜欢最后一个选项,原因是它会导致"类簇",每个类或多或少都是另一个类的相对类(这显然是糟糕的OOP)。

当然,OOP更多的是一门艺术(有时是宗教),而不是一门精确的科学。但是在OOP中进行设计时,创建方便功能通常是一种好的做法吗

如果您坚持OOP设计,那么您的char[8] hash将是一个实际的Hash类。那么这就解决了你的问题。

将公共代码划分为单独的模块始终是一种很好的做法,因为它可以减少代码重复,并使您可以更改为代码分配描述性名称。

为了保持代码的模块化(即,在更改某些内容时减少"涟漪效应"),寻找一个具有最小依赖性的概念来建模一段代码是非常有意义的。

因此,一个只依赖于其参数且没有副作用的全局函数(即返回值中返回的唯一结果)是完全合理的。