Pra*_*rav 84

来自维基百科:

在计算机编程中,垫片是一个小型库,它透明地拦截API,更改传递的参数,处理操作本身或将操作重定向到其他地方.垫片通常在API的行为发生变化时出现,从而导致仍然依赖于旧功能的旧应用程序的兼容性问题.在这些情况下,旧的API仍然可以通过较新代码之上的瘦兼容层来支持.垫片也可用于在不同的软件平台上运行程序.

  • 这个答案与在维基百科上进行实际的谷歌搜索没有什么不同.一个例子很好. (68认同)
  • 68维基百科链接的赞成票?来吧. (18认同)
  • 在javascript说话中被抛出很多. (7认同)
  • 这听起来像是使用Facade设计模式来连接库. (2认同)

Dou*_*oug 73

维基百科中定义的术语"垫片"在技术上将基于其定义被分类为"结构"设计模式.许多类型的"结构"设计模式在(有些人会说事实)面向对象的软件设计模式中非常清楚地描述了"设计模式,可重复使用的面向对象软件的元素",更好地称为"四人帮".

"四人帮"文本概述至少3点被称为"代理","适配器"和"正面",这都提供了"垫片"类型的功能很好地建立的模式.在大多数领域,通常使用和/或错过使用不同的首字母缩略词来导致相同的根概念导致人们混淆.使用"shim"一词来描述更具体的"结构"设计模式"代理","适配器""门面"当然是这类情况的一个明显例子.对于更具体类型的"结构"模式"代理","适配器","门面"以及可能的其他类型,"垫片"仅仅是更通用的术语.

  • 这比@Prasoon Saurav的简单维基百科复制和粘贴更像是一个"真实"的答案...... (13认同)
  • 这个答案表明垫片是一种设计模式(许多中的一种),命名一些类似的设计模式,并且关于人们如何被不同的首字母缩略词混淆.但它实际上并没有回答原始问题,即什么是垫片,它做什么,或者如何使用垫片. (4认同)

BKS*_*eon 29

一般概念 - 通过卡通的简单解释

垫片的一个例子:

我的狗拉尔夫是一个幸运的bash-tard(双双打)

摘要

垫片是一些代码,可以处理所提出的问题(通过"拦截"),而没有任何人对此有所了解.这是一般概念.请参阅上面的答案,了解更具技术性的内容.

  • 我很欣赏这个简化的例子 - 谢谢你(和拉尔夫)!希望牛排好吃。 (15认同)
  • 奇妙的类比。谢谢你! (10认同)
  • 最佳答案。谢谢你! (5认同)
  • 这是我长期以来看到的对于任何设计模式的最好解释。您应该为所有模式创建它们,那就太好了。 (2认同)
  • 这应该被接受的答案 (2认同)

Thi*_*ilo 13

至于这个词的起源,quoth Apple的Dictionary小部件

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
Run Code Online (Sandbox Code Playgroud)

这似乎很适合网页设计师使用这个术语.


MiF*_*vil 13

垫片用于.net 4.5 Microsoft Fakes框架, 用于将您的应用程序与其他程序集隔离以进行单元测试.垫片将调用转移到特定方法,以编写您作为测试的一部分编写的代码


Ric*_*mas 10

根据微软的文章"Demystifying Shims":

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

我认为这意味着垫片是任何代码库的通用术语,它充当中间人并部分或完全改变程序的行为或操作.像真正的中间人一样,它会影响传递给该程序的数据,或影响从该程序返回的数据.

本文使用Windows API作为示例,我发现以下句子相关:

应用程序通常不知道请求是去一个填充DLL而不是Windows本身,Windows不知道请求来自应用程序以外的源(因为填充DLL只是应用程序进程中的另一个DLL) .

为了概括这个引用,制作"垫片三明治"的"面包"的两个程序不应该能够区分与对应程序交谈和与垫片交谈.

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

再次,从文章:

您可以在不访问源代码的情况下修复应用程序,也可以根本不更改它们.您需要额外的管理开销......您可以通过这种方式修复合理数量的应用程序.缺点是支持,因为大多数供应商不支持shimmed应用程序.您无法使用填充程序修复每个应用程序.大多数人通常认为垫片适用于供应商停业的应用程序,软件的战略性不足以需要支持,或者他们只是想购买一些时间.

在这个问题的上下文中,在阅读上述链接之后,诸如"代理","适配器"和"外观"之类的术语更有意义(至少对我而言).

  • 被downvote困惑.如果我的回答是错误的,我很想知道为什么我可以改进这个和未来的答案. (3认同)

BKS*_*eon 6

垫片的另一个例子

当我还是个孩子的时候,我的祖母住在同一个镇上。那是一个小镇。每个人都互相认识。

我曾经给她写过信:

To:   Grand Ma
From: Ben
Run Code Online (Sandbox Code Playgroud)

然后把它投进邮筒…………那些用来投递给她的信件,没有失败。

我不知道也不关心它是怎么发生的。

问:这就引出了一个问题:这些信件是如何送达的?

A:这很简单:消息被填充了。因为是小镇,邮局里的人知道是谁写的信(来自 Woop Woop 的 Ben),也知道奶奶的地址,所以对地址进行了修改和填充,以便可以正确地将邮件发送给她。

# shimmed msg thanks to Post Office operator
To:   Mrs Ammama Kutty, 1 PA Avenue.... 
From: Ben
Run Code Online (Sandbox Code Playgroud)

除了应用于代码之外,它是相同的基本概念。你发个信息。该消息被拦截,结果如预期。那是一个垫片。