什么是Shim?

什么是Shim的定义?

维基百科:

在计算机编程中,一个shim是一个小型库,可以透明地截取API,更改传递的参数,处理操作本身,或将操作redirect到别处。 当API的行为发生变化时,垫片通常会出现,从而导致仍旧依赖旧function的旧应用程序的兼容性问题。 在这些情况下,较旧的代码仍然可以通过较薄的兼容层来支持较旧的API。 也可以使用垫片在不同的软件平台上开发程序。

维基百科定义的术语“垫片”在技术上基于其定义被分类为“结构”devise模式。 在许多types的“结构”devise模式中,很清楚地描述了一些面向对象的软件devise模式,这些devise模式参考了“可重用面向对象软件的devise模式,元素”,也就是所谓的“四人帮” 。

“四人帮”文本概述了至less3种名为“代理”,“适配器”和“外观”的已经build立的模式,它们都提供了“垫片”types的function。 在大多数领域,通常会使用和不使用不同的首字母缩略词来expression相同的根概念,导致人们的混淆。 使用“垫片”一词来描述更具体的“结构”devise模式“代理” , “适配器”和“立面”当然就是这种情况的一个明显例子。 “垫片”只是更具体types的“结构”模式“代理”,“适配器”,“外观”和其他可能的更普遍的术语。

至于这个词的起源,请问苹果公司的词典部件

 noun a washer or thin strip of material used to align parts, make them fit, or reduce wear. verb ( shimmed, shimming) [ trans. ] wedge (something) or fill up (a space) with a shim. ORIGIN early 18th cent.: of unknown origin 

这似乎与网页devise师如何使用该术语非常吻合。

垫片用于.net 4.5 Microsoft伪装框架来隔离您的应用程序与其他程序集进行unit testing 。 Shims将呼叫转移到特定的方法来编写代码,作为testing的一部分

根据微软的文章“揭秘垫片” :

这是一个基于英语单词shim的隐喻,这是一个工程术语,用来描述插在两个物体之间的一块木头或金属,以使它们更好地融合在一起。 在计算机编程中,一个shim是一个小型库,可以透明地截取API,更改传递的参数,处理操作本身,或者将操作redirect到其他地方。 垫片也可以用于在不同的软件平台上运行程序。

我将其解释为意味着垫片是任何充当中间人的代码库的通称,并部分或完全改变程序的行为或操作。 像真正的中间人一样,它可以影响传递给该程序的数据,或影响从该程序返回的数据。

本文以Windows API为例,并find如下相关的语句:

该应用程序通常不知道该请求将发送到一个shim DLL而不是Windows本身,而Windows不知道该请求来自应用程序以外的源(因为shim DLL只是应用程序进程内的另一个DLL) 。

为了概括这个引语,制作“垫片三明治”的“面包”的两个程序不应该区分与其对应程序交谈和与垫片交谈。

使用垫片有什么优点和缺点?

再次,从文章:

您可以在不访问源代码的情况下修复应用程序,也可以根本不修改它们。 你招致了额外的pipe理开销的最小数额…你可以通过这种方式来修复合理数量的应用程序。 缺点是支持,因为大多数供应商不支持shimmed应用程序。 您无法使用垫片修复每个应用程序。 大多数人通常会考虑在供应商停业的情况下使用垫片,软件的战略性不足以获得支持,或者他们只是想花一些时间。

在这个问题的背景下,阅读上述链接之后,像“代理”,“适配器”和“外观”这样的术语更有意义(至less对我来说)。