Qual é a definição de um calço?
terminology
definition
vocabulary
shim
Nanook
fonte
fonte
O termo "calço", conforme definido na Wikipedia, seria tecnicamente classificado, com base em sua definição, como um padrão de design "Estrutural". Os muitos tipos de padrões de projeto "Estruturais" são descritos com muita clareza nos (alguns diriam defacto), os padrões de design de software orientado a objetos referem-se a "Padrões de Design, Elementos de Software Orientado a Objetos Reutilizáveis", mais conhecidos como "Gangue dos Quatro" .
O texto "Gang of Four" descreve pelo menos três padrões bem estabelecidos, conhecidos como "Proxy", "Adapter" e "Facade", todos com funcionalidade do tipo "shim". Na maioria dos campos, muitas vezes o uso e a falta de acrônimos diferentes para o mesmo conceito raiz causam confusão nas pessoas. Usar a palavra "calço" para descrever os padrões de design "Estruturais" mais específicos " Proxy" , "Adaptador" e "Fachada" certamente é um exemplo claro desse tipo de situação. Um "calço" é simplesmente um termo mais geral para os tipos mais específicos de padrões "Estruturais", "Proxy", "Adaptador", "Fachada" e possivelmente outros.
fonte
Explicação simples via desenho animado
Um exemplo de calço:
Resumo
Nota: a analogia é forçada. Normalmente, Ralph recebe exatamente o que ele pediu - mas a mecânica de COMO foi obtida é algo que ele não pode esperar.
Um shim é um código que cuida do que é solicitado (por 'interceptação'), sem que ninguém seja mais sábio sobre isso. Este é o conceito geral. Agora você deve poder ler e entender a entrada da wikipedia sobre calços.
fonte
Quanto às origens da palavra, quoth widget Dicionário da Apple
Isso parece se encaixar muito bem na maneira como os designers da web usam o termo.
fonte
Os calços são usados na estrutura .net 4.5 Microsoft Fakes para isolar seu aplicativo de outros assemblies para teste de unidade . Os calços desviam chamadas para métodos específicos para codificar que você escreve como parte do seu teste
fonte
De acordo com o artigo da Microsoft "Desmistificando Calços" :
Interpreto que isso significa que um shim é um termo genérico para qualquer biblioteca de código que atua como intermediário e altera parcial ou completamente o comportamento ou a operação de um programa. Como um verdadeiro intermediário, ele pode afetar os dados transmitidos para esse programa ou afetar os dados retornados desse programa.
O artigo usa a API do Windows como exemplo e achei a seguinte frase relevante:
Para generalizar essa citação, os dois programas que fazem o "pão" do "sanduíche de calço" não devem ser capazes de diferenciar entre conversar com o programa de contrapartida e conversar com o calço.
Quais são alguns prós e contras do uso de calços?
Novamente, a partir do artigo:
No contexto desta pergunta, termos como "proxy", "adaptador" e "fachada" fazem mais sentido (pelo menos para mim) depois de ler o link acima.
fonte
Como pudemos ver em muitas respostas aqui, um shim é um tipo de adaptador que fornece funcionalidade no nível da API que não era necessariamente parte dessa API. Esse tópico tem muitas respostas boas e completas, então não estou expandindo ainda mais a definição.
No entanto, acho que posso adicionar um bom exemplo, que é o Javascript ES5 Shim ( https://github.com/es-shims/es5-shim ):
O Javascript evoluiu muito nos últimos anos e, entre muitas outras alterações na especificação da linguagem, muitos novos métodos foram adicionados aos seus objetos principais.
Por exemplo, na especificação ES2015 (também conhecida como ES5), o método
find
foi adicionado aoArray
protótipo. Então, digamos que você esteja executando seu código usando um mecanismo JavasScript antes desta especificação (ex: Nó 0.12), que ainda não oferece esse método. Ao carregar o shim ES5, esses novos métodos serão adicionados aoArray
protótipo, permitindo que você os utilize mesmo que não esteja executando uma especificação JavaScript mais recente.Você pode perguntar: por que alguém faria isso em vez de atualizar o ambiente para uma versão mais recente (digamos Nó 8)?
Existem muitos cenários de casos reais em que essa abordagem faz sentido. Um bom exemplo:
Digamos que você tenha um sistema legado que esteja sendo executado em um ambiente antigo e precise usar esses novos métodos para implementar / corrigir uma funcionalidade. A atualização do seu ambiente ainda está em andamento porque existem problemas de compatibilidade que exigem muitas alterações e testes de código (um componente crítico).
Neste exemplo, você pode tentar criar sua própria versão dessa funcionalidade, mas isso tornaria seu código mais difícil de ler, mais complexo, pode introduzir novos bugs e exigirá muitos testes adicionais apenas para cobrir uma funcionalidade que você sabe que será estar disponível na próxima versão.
Em vez disso, você pode usar esse calço e usar esses novos métodos, aproveitando o fato de que essa correção / funcionalidade será compatível após a atualização, porque você já está usando os métodos conhecidos por estarem disponíveis na próxima especificação. E há um motivo de bônus: como esses métodos são nativos da próxima especificação de idioma, há uma boa chance de que eles sejam executados mais rapidamente do que qualquer implementação que você poderia ter feito se tentasse criar sua própria versão.
Outro cenário real em que essa abordagem é bem-vinda é no nível do navegador. Digamos que você precise dar suporte ao navegador antigo e queira aproveitar esses recursos mais recentes. Javascript é uma linguagem que permite adicionar / modificar métodos em seus objetos principais (como adicionar métodos ao protótipo Array), e essas bibliotecas de shim são inteligentes o suficiente para adicionar tais métodos somente se a implementação atual estiver faltando.
PS: 1) Você verá o termo "Polyfill" relacionado a esses calços Javascript. O Polyfill é um tipo de calço mais especializado usado para fornecer compatibilidade direta em diferentes especificações no nível do navegador. A propósito, meu exemplo acima se refere exatamente a esse exemplo.
2) Os calços não se limitam a este exemplo (adicionando funcionalidade que estará disponível em uma versão futura). Existem diferentes casos de uso que também seriam considerados calços.
3) Se você estiver curioso sobre como esse polyfill específico é implementado, é possível abrir as especificações Javascript Array.find e rolar para o final da página, onde você encontrará uma implementação canônica para esse método.
fonte
SHIM é outro nível de verificação de segurança que é feito para todos os serviços, para proteger os sistemas upstream. O SHIM Server valida todas as solicitações recebidas, com credenciais de Usuário de Cabeçalhos, em relação às credenciais de usuário que são passadas na solicitação (SOAP / RESTFUL).
fonte