Language agnostic 何时、为什么以及如何使用包装纸?

Language agnostic 何时、为什么以及如何使用包装纸?,language-agnostic,wrapper,Language Agnostic,Wrapper,我说的是第三方库的包装。直到最近,我还在尝试提供一个足够通用的包装器,以便在需要时可以轻松地切换库。然而,事实证明,这几乎是不可能的,因为即使在处理基本概念方面,库也可能有很大的差异 所以我想到了一个问题,为什么要用包装纸呢。(在过去,有经验的程序员鼓励我为第三方LIB编写包装。);请告诉我他们是否错了,或者你是否有什么要补充的 如果该库在应用程序中没有广泛使用(例如,仅由一个或两个类使用),则根本不要编写包装器,直接使用它即可。(尤其是当它是一个可移植库时。) 当你们写包装纸的时候,不要认为

我说的是第三方库的包装。直到最近,我还在尝试提供一个足够通用的包装器,以便在需要时可以轻松地切换库。然而,事实证明,这几乎是不可能的,因为即使在处理基本概念方面,库也可能有很大的差异

所以我想到了一个问题,为什么要用包装纸呢。(在过去,有经验的程序员鼓励我为第三方LIB编写包装。);请告诉我他们是否错了,或者你是否有什么要补充的

  • 如果该库在应用程序中没有广泛使用(例如,仅由一个或两个类使用),则根本不要编写包装器,直接使用它即可。(尤其是当它是一个可移植库时。)
  • 当你们写包装纸的时候,不要认为你们能使一个尺寸适合所有的包装纸。写一些适合图书馆优点的东西
  • 。。。但在某些情况下,您仍然可以对包装器进行足够的泛化,以便更容易切换库。(例如:大多数图形库使用图像和字体。)
  • 当库提供的功能超出您的需要时,包装器非常有用。您可以在包装器中隐藏不需要的功能
  • 对于C libs(如果您使用的是C++),您还可以编写一个包装器来帮助您进行自动内存管理

你认为使用包装的好处是什么?应该如何正确使用它们?

我想你已经一针见血了,包装只是为了让可能被替换掉的东西是个坏主意。典型的例子是一个数据库,实际上谁曾经不得不从SQL切换到Oracle(我知道人们已经这样做了,但是有一个包装器真的有帮助吗?)

根据我的经验,只有当包装器将对第三方组件或api的2+调用隐藏到对调用代码有意义的单个调用中时(基本上是a),或者如果包装器包装代码并为调用方添加值/类型转换(an),包装器才有帮助


因此,包装器必须在此时此地为消费者提供好处,而不是潜在的未来好处(对系统编码人员)这可能永远都不需要。

如果你想独立测试,包装器是强大的。例如,我的开发系统与我的客户activedirectory没有连接,activedirectory包含用户名和角色。因此我有一个UserInfoWrapper接口,它有两个实现:一个使用activedirectory,另一个使用假用户数据为了发展。

“计算机科学中的所有问题都可以通过另一种间接方式来解决”巴特勒·兰普森

通过创建包装器来抽象第三方库需要花费一定的成本。您需要确定该成本是否值得。例如,这非常困难(或者至少需要大量的开发成本)在UI工具包或库上创建包装。相反,为第三方日志库创建包装相对容易

包装器还可以用于在第三方库的基础上提供特定于域的简化API