什么是Shim的定义?
什么是Shim的定义?
Shim是一种代码,它在“拦截”请求时悄悄处理。
一个Shim的示例是rbenv(一个ruby
工具)。对ruby命令的调用被“shimmed”。也就是说,当你运行bundle install
时,rbenv会拦截该消息,并根据你所运行的特定版本的Ruby重新路由它。如果这不太清楚,请尝试这个示例,或者想象仙女教母拦截消息并提供适当的结果。
就是这样!
根据维基百科的定义,术语“shim”从技术上讲可以被归类为“结构型”设计模式。许多类型的“结构型”设计模式在(有些人会说是事实上的)面向对象软件设计模式参考书《可重用的面向对象软件元素》("Design Patterns, Elements of Reusable Object-Oriented Software")中非常清楚地描述了,这本书更为人所知的名字是"Gang of Four"。
"四人帮"的文本概述了至少3个被称为“代理”,“适配器”和“外观”的成熟模式,它们都提供了“垫片”类型的功能。在大多数领域中,常常是使用不同缩写词来描述相同的根概念,这会导致人们困惑。使用“垫片”一词来描述更具体的“结构型”设计模式"代理", "适配器"和"外观",肯定是这种情况的一个明显例子。“垫片”只是更具体的“结构型”模式“代理”,“适配器”,“外观”和可能其他模式的更普遍的术语。
至于这个词的起源,引用苹果公司的字典小部件所说:
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
这似乎与网页设计师使用该术语的方式相当吻合。
Shims在.NET 4.5和Microsoft Fakes框架中使用,用于单元测试中隔离你的应用程序与其他程序集。 Shims可以将对特定方法的调用重定向到你编写的代码,作为测试的一部分。
find
已被添加到Array
原型中。所以假设你正在运行使用早于此规范的JavasScript引擎的代码(例如Node 0.12),它尚未提供该方法。通过加载ES5 shim,这些新方法将被添加到Array
原型中,即使你没有在较新的Javascript规范上运行,也可以使用它们。当前设置:
一月
client app(v1) -> server A (returns a response itself)
client app(v2) -> server B (returns response)
client app(v1) -> server A (returns response)
client app (v1) -> server A - > server B -> server A
client app (v2) - > server B
SHIM是为了保护上游系统而针对所有服务进行的另一级别的安全检查。SHIM服务器会针对每个传入的请求,使用Header用户凭证来验证请求中传递的用户凭证(SOAP / RESTFUL)。