扩展类以进行调试:公共API、隐藏实现或其他什么
Extending a class for debugging: public API, hidden implementation or something else?
我正在处理一个涉及3D绘图的相当大的项目,我想添加一些可视化工具(例如,查看对象的边界框)以使调试更容易。然而,我在决定如何处理这件事时遇到了一个问题。
一种选择是创建一个公共函数来绘制可视化工具,并在从UI启用调试时调用此函数。这样做的优点是不修改现有函数,而是用新函数扩展类。缺点是"创建依赖项",正如我的一位同事所说,我们需要修改基类和所有派生类来添加此函数。
另一个选项是修改现有的绘图功能,以便它处理可视化工具的绘图。这隐藏了实现细节,但在我看来,这也降低了代码的模块化程度。
还有一个选项是扩展类,在绘图函数中添加可视化工具,并在启用调试时交换类。Mixin会有所帮助,但C++不支持。
做到这一点的最佳方法是什么?我正在寻找一个模块化的、尊重SOLID原则的解决方案。
看起来您正在寻找"委派模式"。看见http://en.wikipedia.org/wiki/Delegation_pattern
在软件工程中,委托模式是面向对象编程中的一种设计模式,其中一个对象不是执行其指定的任务之一,而是将该任务委托给相关的辅助对象。有一种责任倒置,其中一个被称为委托的辅助对象被赋予为委托者执行任务的责任。
另请参阅http://best-practice-software-engineering.ifs.tuwien.ac.at/patterns/delegation.html
相关文章:
- 使用智能指针指向 C 库中的结构,该结构通过 typedef 隐藏实现(即不完整的类型)
- 我可以为 C++ 类提供不完整的标头以隐藏实现详细信息吗?
- 使用TDD时隐藏文件访问实现详细信息
- 隐藏变异模板实现
- 隐藏PIMPL-Objects拥有的成员的实现
- 隐藏C 接口的特定实现
- 在仅标头库中隐藏实现
- 使用指针(PIMPL IDIOM)隐藏实现
- 是否可以隐藏模板类的实现
- 从其接口隐藏类实现
- 使用私有继承来隐藏实现是个好主意吗
- 如何在C++共享库中隐藏业务对象的实现细节并提供接口
- 通过前向声明隐藏实现
- 扩展类以进行调试:公共API、隐藏实现或其他什么
- 通过内部指针隐藏实现详细信息
- 循环包含在c++头文件中隐藏实现细节的技巧
- 通过减少填充头的数量来隐藏实现细节
- 从工厂函数返回 std::unique_ptr<T> 创建纯虚拟接口的完全隐藏实现
- 成员函数的隐藏实现(如静态全局函数)
- 如何隐藏实现助手模板