类接口重复
Class interface duplication
本文关键字:接口 更新时间:2023-10-16
我有时会遇到,主要是在使用旧代码时,一个类仅仅是将呼叫的转发到另一个班级的情况。想象一下,有一个旧的控制器可以控制一些部分,但是其中一些可以专用于新课程。现在,旧控制器将调用新类接口。
ex。
class Controller {
public:
void addObject(const std::string & id,
const Object * obj) {
m_Wrk.addObject(id, obj);
}
private:
Worker m_Wrk;
};
class Worker {
public:
void addObject(const std::string & id,
const Object * obj) {
//do actual adding
}
};
现在,在考虑测试软件时,可能需要在两个类中对接口进行测试,并且在控制器中更难,因为它并不是因为它不需要检查控制器测试的工作者更改。
这种用法特别糟糕,还是可以在已经存在的代码中使用此类设计,如上所述。
谢谢
很难回答此代码是好还是坏 - 取决于情况。所讨论的代码(除了m_Wrk
字段应该是指针的事实)是PIMPL模式,它是一种桥梁模式。该模式用于分裂抽象和实现,以便它们可以独立更改。
例如,如果您编写了C 库,并且您想提供一个稳定的ABI,如果没有公共接口没有更改,则可以将Controller
接口放入标题中,并将Worker
类的插入,并将Worker
的接口和实现放在.cpp
文件中。当Worker
更改时,Controller
ABI保持不变。如果将实现详细信息直接放在Controller
类中,则ABI可能会更改。
此外,这种模式(通常是桥梁)允许您使用给定的抽象的不同实现,因此,可以根据liskov替换的接口扩展和继承分离继承。
另外,如果Controller
实现与Worker
相同的接口,将来它可以实现一些其他行为,例如代理模式。
如果其中一种情况发生在您的项目中(或将来可能发生),则可能是一个很好的代码。如果没有,那只是一个不必要的并发症。
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- Visual C++GC接口如何启用它以及要包含哪个库
- Windows.h与GLFW.h的接口
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 提供与TMP和SFINAE的通用接口
- 为重写std::exception的库生成swig接口时出错
- 内联如何影响模块接口中的成员函数
- COM 接口 c# 封送数组数组
- 如何在 SCIP C++ 接口中获取 MILP 约束矩阵中的系数值
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 如何绑定 C++ gRPC 客户端的网络接口
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 如何从实现接口的模板化类实例访问结构
- 带有进度表的 curl 多接口程序
- 设计帮助 - 为不同类型的消息处理通用接口的设计模式
- 我可以在具有一个标头和一个接口的 cpp 文件中有多个嵌入吗?
- 类接口,可以创建N个方法
- 类具有相同的接口,但参数的类型不同
- 如何与 Cheerp/js 中的 extern 变量接口?
- 如何使用现代 CMake 安装捆绑的接口依赖项?