gpt4 book ai didi

c++ - 保持模块独立,同时仍然相互使用

转载 作者:太空狗 更新时间:2023-10-29 21:29:56 25 4
gpt4 key购买 nike

我的 C++ 应用程序的很大一部分使用类来描述数据模型,例如类似 ClassType 的东西(它实际上模拟了纯 C++ 中的反射)。

我想向我的应用程序添加一个新模块,它需要使用这些 ClassType,但我不想从我的新模块中引入对 ClassType 的依赖。

到目前为止,我有以下选择:

  • 不使其独立并引入对 ClassType 的依赖性,有在我的应用程序中创建更多“意大利面条”依赖性的风险(这是我最不喜欢的解决方案)
  • 引入一个新类,例如IType,并让我的模块只依赖于 IType。然后 ClassType 应该继承自 IType。
  • 使用字符串作为标识方法,并强制新模块的用户在需要时将 ClassType 转换为字符串,反之亦然。
  • 使用 GUID(甚至简单的整数)作为标识,还需要在 GUID 和 ClassType 之间进行转换

在应用程序中解耦模块时,您应该尝试走多远?

  • 只引入一个接口(interface),让所有其他模块都依赖这个接口(interface)? (就像上面描述的 IType)
  • 甚至通过使用其他标识(如字符串或 GUID)进一步解耦它?

我担心解耦太多,代码会变得更不稳定,更难调试。我在 Qt 中看到过一个这样的示例:信号和槽使用字符串链接,如果您输入错误,该功能将不起作用,但它仍然可以编译。

您应该将模块解耦到什么程度?

最佳答案

99% 的情况下,如果您的设计基于反射,那么您的设计就会出现重大问题。

一般来说,像

if (x is myclass)
elseif (x is anotherclass)
else

是一个糟糕的设计,因为它忽略了多态性。如果您这样做,则项目 x 违反了 Liskov 替换原则。

此外,鉴于 C++ 已经具有 RTTI,我不明白您为什么要重新发明轮子。这就是 typeofdynamic_cast 的用途。

关于c++ - 保持模块独立,同时仍然相互使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3780770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com