0

我们有一个 C++ 解决方案 (VC++ 2005),它广泛使用了第 3 方映射库。我们正在创建包装器库,以便我们可以在我们的解决方案中使用替代映射库,而不必为每个包装器库重写它 - 每个包装器库具有相同的 API,但包装不同的第 3 方映射库。

我们正在以迭代的方式执行此操作,我想知道我们如何确保当我们将类从使用特定映射库重构为使用包装器时,所有使用/引用都会更新。根据定义,许多包装类可以与包装的库类互操作,因此我们很容易错过将 MapXYZ::Attribute 的一个实例更新为 OurMaps::Attribute 的情况,并且在我们切换映射库之前它都可以正常工作。

是否有任何工具或流程可以针对这种情况提供建议?

4

1 回答 1

2

首先,如果包装器可以与被包装的类互操作,这并不意味着它们是可交换的。因此,为了确保您不会意外使用原始库的类,只需删除任何#include引用其标题的内容。您的编译器会抱怨对原始类及其成员的任何使用。注意:您不会将这些 heaers 包含在包装器库的标头中,否则抽象会泄漏并且不可能替换当前库。

此外,对于您的包装器,您不应该过于拘泥于您一直在使用的库的 API,因为其他库可能不提供类似的方法和属性。相反,根据您使用的基本概念定义包装器 API,并且您将来可能使用的任何库都必须提供一种或另一种方式。这意味着,API 不应类似于某个特定的第三方库提供的内容,而应显示您需要的内容。换句话说,API 提供了您的语言的动词和名词,以认为的方式描述问题域,并且包装器类会将其翻译成包装库的语言。
这样,您将在代码中对映射库进行干净的抽象,尽管您必须对其进行重构,消除您必须使用的曲柄和螺栓来使第三方库工作,而不是仅仅替换class ThirdPartyXclass MyWrapperX.

于 2013-05-02T10:55:55.480 回答