扩展一个用于调试的类:公共API,隐藏实现还是其他什么?

时间:2014-10-29 08:34:00

标签: c++ extend solid-principles

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

一个选项是创建一个公共函数来绘制可视化器,并在我从UI启用调试时调用此函数。这样做的好处是不修改现有函数,而是使用新函数扩展类。缺点是“创建依赖关系”,正如我的一位同事所说,我们需要修改基类,以及所有派生类来添加这个功能。

另一种选择是修改现有的绘图功能,以便处理可视化工具的绘制。这隐藏了实现细节,但在我看来它使代码更少模块化。

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

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

1 个答案:

答案 0 :(得分:1)

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

  

在软件工程中,委托模式是面向对象编程中的设计模式,其中对象不是执行其声明的任务之一,而是将该任务委托给关联的辅助对象。有一个责任倒置,其中一个辅助对象(称为委托)负责为委托人执行任务。

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