扩展类以进行调试:公共API、隐藏实现或其他什么

Extending a class for debugging: public API, hidden implementation or something else?

本文关键字:隐藏 实现 什么 其他 API 公共 调试 扩展      更新时间:2023-10-16

我正在处理一个涉及3D绘图的相当大的项目,我想添加一些可视化工具(例如,查看对象的边界框)以使调试更容易。然而,我在决定如何处理这件事时遇到了一个问题。

一种选择是创建一个公共函数来绘制可视化工具,并在从UI启用调试时调用此函数。这样做的优点是不修改现有函数,而是用新函数扩展类。缺点是"创建依赖项",正如我的一位同事所说,我们需要修改基类和所有派生类来添加此函数。

另一个选项是修改现有的绘图功能,以便处理可视化工具的绘图。这隐藏了实现细节,但在我看来,这也降低了代码的模块化程度。

还有一个选项是扩展类,在绘图函数中添加可视化工具,并在启用调试时交换类。Mixin会有所帮助,但C++不支持。

做到这一点的最佳方法是什么?我正在寻找一个模块化的、尊重SOLID原则的解决方案。

看起来您正在寻找"委派模式"。看见http://en.wikipedia.org/wiki/Delegation_pattern

在软件工程中,委托模式是面向对象编程中的一种设计模式,其中一个对象不是执行其指定的任务之一,而是将该任务委托给相关的辅助对象。有一种责任倒置,其中一个被称为委托的辅助对象被赋予为委托者执行任务的责任。

另请参阅http://best-practice-software-engineering.ifs.tuwien.ac.at/patterns/delegation.html