我在谈论第三方库的包装器。直到最近我才试图提供足够通用的包装器,以便在需要时轻松切换库。然而事实证明这几乎是不可能的,因为即使在如何处理基本概念方面,库也会有很大差异。
所以问题就在于我为什么要使用包装器。 (在过去,我受到经验丰富的编码员的鼓励,为第三方库提供包装。)我得出以下结论;请告诉我他们是否错了,或者你有什么要补充的。
您认为使用包装器的(dis)优势是什么?它们应该如何正确使用?
答案 0 :(得分:4)
我认为你已经击中头部,包装只是为了让某些东西可能被换掉是一个坏主意。经典的例子是一个数据库,他实际上曾经不得不从SQL切换到Oracle(我知道人们有,但是多久和确实有一个包装器确实有帮助?)。
根据我的经验,如果一个包装器隐藏了对第三方组件的2个以上的调用,或者api进入一个调用,这意味着调用代码的某些东西(基本上是facade pattern)或者它包含代码并为调用者添加值/类型转换(adapter pattern)。
因此,包装器必须在此处向消费者提供益处,而不是可能永远不需要的潜在未来利益(对于系统编码器)。
答案 1 :(得分:1)
如果你想孤立地测试,那么Wrappers就很强大了。例如,我的开发系统与我的客户activedirectory没有连接,该目录包含用户名和角色。所以我有一个UserInfoWrapper-Interface有两个实现:一个使用activedirectory,另一个使用假用户数据进行开发。
答案 2 :(得分:1)
“计算机科学中的所有问题都可以通过另一个间接层面来解决” 作者:Butler Lampson
通过创建包装器来抽象第三方库需要花费一些成本。您需要决定成本是否值得。对于例如在UI工具包或库上创建包装器是非常困难的(或者至少涉及显着的开发成本)。相反,为第三方日志库创建包装器相对容易。
Wrapper还可用于在第三方库之上提供特定于域的API和简化的API。门面图案可能有所帮助(正如Paul Hadfield上面提到的那样)。