便利功能是一种良好的做法吗
Are convenience functions a good practice?
我正在编写一个C++项目,并正在考虑对一些函数进行编码,这些函数总是具有相同的参数和相同的输出,而且不同的(不相关的)类将使用它们。但我现在很不情愿,因为我觉得这样的"方便"函数并不像它应该的那样OOP,我应该为这些函数编写一个最小的类。那么,从C++的角度来看,方便函数是一种很好的面向对象编程实践吗?这是一个糟糕设计的标志吗?
举例说明:
假设我们有两个类,class Sphere
和class Pillow
。由于某些(可能不同)哈希原因,Bot有一个成员变量char[8] hash
,但总是使用相同的哈希算法。现在我有三个选择:
- 为每个类实现成员函数
makeHash()
- 实现类调用的方便函数
makeHash()
- 重构完整的设计,使
Sphere
和Pillow
成为同一父类的子类
我不喜欢第一个选项,因为它会创建重复的代码,也不喜欢最后一个选项,原因是它会导致"类簇",每个类或多或少都是另一个类的相对类(这显然是糟糕的OOP)。
当然,OOP更多的是一门艺术(有时是宗教),而不是一门精确的科学。但是在OOP中进行设计时,创建方便功能通常是一种好的做法吗?
如果您坚持OOP设计,那么您的char[8] hash
将是一个实际的Hash
类。那么这就解决了你的问题。
将公共代码划分为单独的模块始终是一种很好的做法,因为它可以减少代码重复,并使您可以更改为代码分配描述性名称。
为了保持代码的模块化(即,在更改某些内容时减少"涟漪效应"),寻找一个具有最小依赖性的概念来建模一段代码是非常有意义的。
因此,一个只依赖于其参数且没有副作用的全局函数(即返回值中返回的唯一结果)是完全合理的。
相关文章:
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 有没有一种方法可以在编译时获得作用域类名
- 对于C++中使用智能指针的指针算术限制,有没有一种变通方法
- 一种在C++中读取TXT配置文件的简单方法
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 寻找一种加速功能的方法
- 是否有一种方法可以避免在RVALUE和LVALUE参考中创建功能时避免重复的代码
- 禁止模板虚拟功能是否是一种不必要的谨慎
- 是否有一种方法可以让公共成员在班级外部无法解码,而无需访问包装器功能
- C++1z 协程是一种语言功能
- C++ Qt - 一种模仿Photoshop叠加功能的方法
- 将铸造/施工转化为一种完美的可向前推进的功能
- 便利功能是一种良好的做法吗