it-swarm.com.de

Was ist ein Shim?

Was ist die Definition eines Shim?

102
Nanook

Von Wikipedia:

Bei der Computerprogrammierung ist shim eine kleine Bibliothek, die eine API transparent abfängt, die übergebenen Parameter ändert, die Operation selbst behandelt oder die Operation an anderer Stelle umleitet. Shims entstehen normalerweise, wenn sich das Verhalten einer API ändert, was zu Kompatibilitätsproblemen für ältere Anwendungen führt, die noch auf der älteren Funktionalität beruhen. In diesen Fällen kann die ältere API immer noch von einer dünnen Kompatibilitätsebene über dem neueren Code unterstützt werden. Shims können auch verwendet werden, um Programme auf anderen Softwareplattformen auszuführen, für die sie entwickelt wurden.

79
Prasoon Saurav

Der Begriff "Shim", wie er in Wikipedia definiert ist, wird technisch basierend auf seiner Definition als "strukturelles" Entwurfsmuster klassifiziert. Die vielen Arten von "strukturellen" Entwurfsmustern werden in der objektorientierten (zum Teil defekto) objektorientierten Entwurfsmuster-Referenz "Entwurfsmuster, Elemente wiederverwendbarer objektorientierter Software" besser beschrieben, die besser als "bezeichnet wird. Gruppe von vier"

Der "Gang of Four" -Text umreißt mindestens 3 gut etablierte Muster, die als "Proxy", "Adapter" und "Facade" bezeichnet werden und alle "Shim" -Funktionalität bieten. In den meisten Bereichen werden häufig unterschiedliche Akronyme für dasselbe Wurzelkonzept verwendet oder fehlen, was zu Verwirrung führt. Die Verwendung des Wortes „Shim“ zur Beschreibung der spezifischeren „strukturellen“ Entwurfsmuster "Proxy" , "Adapter" und "Facade" ist sicherlich ein klares Beispiel für diese Art von Situation. Ein "Shim" ist einfach ein allgemeinerer Begriff für die spezifischeren Typen von "strukturellen" Mustern "Proxy", "Adapter", "Fassade" und möglicherweise andere.

61
Doug

Was die Ursprünge des Wortes angeht, so ist das Wörterbuch-Widget von Apple

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

Dies scheint ziemlich gut zu passen, wie Webdesigner den Begriff verwenden.

13
Thilo

Shims werden in .NET verwendet. 4.5 Microsoft Fakes Framework , um Ihre Anwendung von anderen Baugruppen für Komponententests zu isolieren . Shims leiten Aufrufe an bestimmte Methoden um, um Code zu schreiben, den Sie als Teil Ihres Tests schreiben

11

Laut Microsofts Artikel "Demystifying Shims" :

Es ist eine Metapher, die auf dem englischsprachigen Word-Shim basiert, der ein .__ ist. technischer Begriff, der zur Bezeichnung eines Stücks Holz oder Metall verwendet wird. zwischen zwei Objekten eingefügt, damit sie besser zusammenpassen. Im Computerprogrammierung, ein Shim ist eine kleine Bibliothek, die transparent fängt eine API ab, ändert die übergebenen Parameter, behandelt die Vorgang selbst oder leitet den Vorgang an anderer Stelle um. Scheiben können auch zum Ausführen von Programmen auf anderen Softwareplattformen als ihnen verwendet werden wurden für entwickelt.

Ich interpretiere das so, dass ein Shim ein Oberbegriff für jede Codebibliothek ist, die als Mittelsmann fungiert und das Verhalten oder den Betrieb eines Programms teilweise oder vollständig ändert. Wie ein echter Zwischenhändler kann er die an dieses Programm übergebenen Daten oder die von diesem Programm zurückgegebenen Daten beeinflussen.

In dem Artikel wird die Windows-API als Beispiel verwendet, und ich fand den folgenden Satz relevant:

Der Anwendung ist im Allgemeinen nicht bewusst, dass die Anforderung an eine .__ geht. Shim DLL anstelle von Windows selbst und Windows ist nicht bewusst, dass die Anfrage kommt von einer anderen Quelle als der Anwendung (weil das Shim DLL nur eine andere DLL im Prozess der Anwendung ist).

Um dieses Zitat zu verallgemeinern, sollten die beiden Programme, die das "Brot" des "Shim-Sandwich" bilden, nicht in der Lage sein, zwischen dem Gespräch mit ihrem Gegenprogramm und dem Gespräch mit dem Shim zu unterscheiden.

Was sind einige Vor- und Nachteile der Verwendung von Distanzscheiben?

Wieder aus dem Artikel:

Sie können Anwendungen ohne Zugriff auf den Quellcode oder ohne .__ beheben. sie überhaupt ändern. Sie erhalten einen minimalen Betrag an zusätzlichen Verwaltungsaufwand ... und Sie können ein .__ beheben. eine vernünftige Anzahl von Anwendungen auf diese Weise. Der Nachteil ist die Unterstützung als Die meisten Anbieter unterstützen keine angepassten Anwendungen. Sie können nicht alle Anwendung mit Distanzscheiben. Die meisten Leute ziehen Shims für .__ in Betracht. Anwendungen, bei denen der Anbieter nicht in Betrieb ist, ist die Software nicht strategisch genug, um Unterstützung zu benötigen, oder sie wollen nur etwas kaufen Zeit.

Im Zusammenhang mit dieser Frage sind Begriffe wie "Proxy", "Adapter" und "Fassade" (zumindest für mich) sinnvoller, nachdem sie den obigen Link gelesen haben.

9
Richie Thomas

Das allgemeine Konzept - einfache Erklärung per Cartoon

Ein Beispiel für eine Unterlage:

 My Dog Ralph is one lucky bash-tard (double pun intended)

Zusammenfassung

Ein Shim ist ein Code, der sich um das kümmert, was gefragt wird (durch 'Abfangen'), ohne dass jemand darüber klüger wird. Dies ist das allgemeine Konzept. Bitte beziehen Sie sich auf die Antworten oben für etwas mehr technischer.

6
BKSpurgeon

Wie wir hier in vielen Antworten sehen konnten, handelt es sich bei einem Shim um eine Art Adapter, der Funktionen auf API-Ebene bereitstellt, die nicht unbedingt Teil dieser API waren. Dieser Thread hat viele gute und vollständige Antworten, daher werde ich die Definition nicht weiter erweitern.

Ich denke jedoch, dass ich ein gutes Beispiel hinzufügen kann, nämlich das Javascript ES5 Shim ( https://github.com/es-shims/es5-shim ):

Javascript hat sich in den letzten Jahren stark weiterentwickelt. Neben vielen anderen Änderungen an der Sprachspezifikation wurden den Kernobjekten viele neue Methoden hinzugefügt.

Beispielsweise wurde in der ES2015-Spezifikation (auch bekannt als ES5) die Methode find dem Prototyp Array hinzugefügt. Nehmen wir also an, Sie führen Ihren Code vor dieser Spezifikation mit einer JavasScript-Engine aus (Beispiel: Knoten 0.12), die diese Methode noch nicht bietet. Durch das Laden des ES5-Shims werden diese neuen Methoden zum Prototyp Array hinzugefügt, sodass Sie sie auch verwenden können, wenn Sie keine neuere JavaScript-Spezifikation verwenden.

Sie fragen sich vielleicht: Warum würde jemand das tun, anstatt die Umgebung auf eine neuere Version zu aktualisieren (sagen wir mal Node 8)?

Es gibt viele reale Szenarien, in denen dieser Ansatz sinnvoll ist. Ein gutes Beispiel:

Angenommen, Sie haben ein Altsystem, das in einer alten Umgebung ausgeführt wird, und Sie müssen solche neuen Methoden verwenden, um eine Funktionalität zu implementieren/zu beheben. Das Upgrade Ihrer Umgebung ist nach wie vor in Arbeit, da Kompatibilitätsprobleme bestehen, die zahlreiche Codeänderungen und -tests erfordern (eine wichtige Komponente).

In diesem Beispiel könnten Sie versuchen, Ihre eigene Version einer solchen Funktionalität zu entwickeln. Dies würde jedoch den Code schwieriger lesbar machen, komplexer, kann neue Fehler einführen und erfordert viele zusätzliche Tests, nur um eine Funktionalität abzudecken, die Ihnen bekannt ist in der nächsten Version verfügbar sein.

Stattdessen können Sie dieses Shim verwenden und von diesen neuen Methoden Gebrauch machen, indem Sie die Tatsache nutzen, dass dieser Fix/diese Funktion nach dem Upgrade kompatibel ist, da Sie bereits die Methoden verwenden, die in der nächsten Spezifikation verfügbar sind. Und es gibt einen Bonusgrund: Da diese Methoden für die nächste Sprachspezifikation nativ sind, besteht eine gute Chance, dass sie schneller ausgeführt werden als jede Implementierung, die Sie hätten ausführen können, wenn Sie versucht hätten, eine eigene Version zu erstellen.

Ein weiteres reales Szenario, in dem ein solcher Ansatz erwünscht ist, betrifft die Browser-Ebene. Angenommen, Sie müssen alte Browser unterstützen und diese neueren Funktionen nutzen. Javascript ist eine Sprache, mit der Sie Methoden in ihren Kernobjekten hinzufügen/ändern können (z. B. dem Array-Prototyp Methoden hinzufügen). Diese Shim-Bibliotheken sind intelligent genug, um solche Methoden nur dann hinzuzufügen, wenn die aktuelle Implementierung nicht vorhanden ist. 

PS: 1) Sie werden den Begriff "Polyfill" sehen, der sich auf diese Javascript-Shims bezieht. Polyfill ist eine speziellere Art von Shim, die für Vorwärtskompatibilität in verschiedenen Browser-Level-Spezifikationen sorgt. Mein Beispiel oben bezieht sich übrigens genau auf dieses Beispiel.

2) Shims sind nicht auf dieses Beispiel beschränkt (Hinzufügen von Funktionen, die in zukünftigen Versionen verfügbar sein werden). Es gibt verschiedene Anwendungsfälle, die ebenfalls als Shim betrachtet werden.

3) Wenn Sie wissen möchten, wie dieser spezielle Polyfill implementiert wird, können Sie Javascript Array.find specs öffnen und zum Ende der Seite scrollen, wo Sie eine kanonische Implementierung für diese Methode finden.

3

SHIM ist eine weitere Stufe der Sicherheitsüberprüfung, die für alle Dienste durchgeführt wird, um vorgelagerte Systeme zu schützen. Der SHIM-Server überprüft jede eingehende Anforderung mit Header-Benutzeranmeldeinformationen anhand der Benutzeranmeldeinformationen, die in der Anforderung übergeben werden (SOAP/RESTFUL).

0
Nirbhay Rana