我的 C++ 应用程序的很大一部分使用类来描述数据模型,例如 ClassType(它实际上模拟普通 C++ 中的反射)。
我想在我的应用程序中添加一个新模块,它需要使用这些 ClassType,但我不想在 ClassType 上引入新模块的依赖关系。
到目前为止,我有以下选择:
- 不使其独立并引入对 ClassType 的依赖,有在我的应用程序中创建更多“意大利面条”依赖的风险(这是我最不喜欢的解决方案)
- 引入一个新类,例如 IType,并让我的模块只依赖于 IType。然后 ClassType 应该从 IType 继承。
- 使用字符串作为识别方法,并在需要时强制新模块的用户将 ClassType 转换为字符串,反之亦然。
- 使用 GUID(甚至简单的整数)作为标识,还需要 GUID 和 ClassType 之间的转换
在应用程序中解耦模块时,您应该尝试多远?
- 只是引入一个接口,让所有其他模块依赖该接口?(就像上面描述的 IType 一样)
- 甚至通过使用其他标识(如字符串或 GUID)进一步解耦?
恐怕解耦得太远,代码会变得更不稳定,更难调试。我在 Qt 中看到过一个这样的例子:信号和槽是使用字符串链接的,如果你输入错误,该功能将不起作用,但它仍然可以编译。
你应该让你的模块解耦到什么程度?