Dou*_*oug 73
维基百科中定义的术语"垫片"在技术上将基于其定义被分类为"结构"设计模式.许多类型的"结构"设计模式在(有些人会说事实)面向对象的软件设计模式中非常清楚地描述了"设计模式,可重复使用的面向对象软件的元素",更好地称为"四人帮".
在"四人帮"文本概述至少3点被称为"代理","适配器"和"正面",这都提供了"垫片"类型的功能很好地建立的模式.在大多数领域,通常使用和/或错过使用不同的首字母缩略词来导致相同的根概念导致人们混淆.使用"shim"一词来描述更具体的"结构"设计模式"代理","适配器"和"门面"当然是这类情况的一个明显例子.对于更具体类型的"结构"模式"代理","适配器","门面"以及可能的其他类型,"垫片"仅仅是更通用的术语.
BKS*_*eon 29
垫片的一个例子:
垫片是一些代码,可以处理所提出的问题(通过"拦截"),而没有任何人对此有所了解.这是一般概念.请参阅上面的答案,了解更具技术性的内容.
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应用程序.您无法使用填充程序修复每个应用程序.大多数人通常认为垫片适用于供应商停业的应用程序,软件的战略性不足以需要支持,或者他们只是想购买一些时间.
在这个问题的上下文中,在阅读上述链接之后,诸如"代理","适配器"和"外观"之类的术语更有意义(至少对我而言).
当我还是个孩子的时候,我的祖母住在同一个镇上。那是一个小镇。每个人都互相认识。
我曾经给她写过信:
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)
除了应用于代码之外,它是相同的基本概念。你发个信息。该消息被拦截,结果如预期。那是一个垫片。