Co to jest podkładka?

Odpowiedzi:

92

Z Wikipedii:

W programowaniu komputerowym podkładka to mała biblioteka, która w przejrzysty sposób przechwytuje API, zmienia przekazane parametry, obsługuje samą operację lub przekierowuje operację w inne miejsce. Podkładki podkładki pojawiają się zwykle, gdy zmienia się zachowanie interfejsu API, powodując w ten sposób problemy ze zgodnością dla starszych aplikacji, które nadal korzystają ze starszej funkcjonalności. W takich przypadkach starszy interfejs API może nadal być obsługiwany przez cienką warstwę zgodności na nowszym kodzie. Podkładki mogą być również używane do uruchamiania programów na innych platformach oprogramowania niż zostały opracowane.

Prasoon Saurav
źródło
83
Ta odpowiedź nie różni się od rzeczywistego wyszukiwania w Google na Wikipedii. Przykład byłby fajny.
dance2die
4
To brzmi jak użycie wzorca projektowego Fasada do łączenia bibliotek.
blz
84

Termin „podkładka” zdefiniowany w Wikipedii byłby technicznie klasyfikowany, na podstawie jego definicji, jako wzorzec projektowy „Strukturalny”. Wiele typów „strukturalnych” wzorców projektowych jest dość jasno opisanych w (niektórzy powiedzieliby, że defacto) obiektowym wzorcu projektowym oprogramowania „Wzorce projektowe, elementy oprogramowania obiektowego wielokrotnego użytku”, lepiej znanym jako „Gang czwórki” .

Tekst „Gang of Four” zawiera co najmniej 3 dobrze ugruntowane wzorce znane jako „Proxy”, „Adapter” i „Facade”, które zapewniają funkcjonalność typu „shim”. W większości dziedzin często używa się lub pomija użycie różnych akronimów dla tego samego pojęcia głównego, co powoduje zamieszanie. Użycie słowa „podkładka” do opisania bardziej szczegółowych „strukturalnych” wzorców projektowych „Proxy” , „Adapter” i „Fasada” z pewnością jest wyraźnym przykładem tego typu sytuacji. „Podkładka” to po prostu bardziej ogólne określenie dla bardziej szczegółowych typów wzorów „strukturalnych” „Proxy”, „Adapter”, „Fasada” i być może innych.

Doug
źródło
5
Ta odpowiedź wskazuje, że podkładka jest wzorcem projektowym (jednym z wielu), wymienia niektóre podobne wzorce projektowe i mówi o tym, jak ludzie są zdezorientowani różnymi akronimami. Ale tak naprawdę nie odpowiada na pierwotne pytanie, czym jest podkładka, do czego służy lub jak jest używana.
Richie Thomas,
53

Proste wyjaśnienie za pośrednictwem kreskówki

Przykład podkładki:

Mój pies Ralph to jeden szczęśliwy bash-tard (podwójna gra słów przeznaczona)

Podsumowanie

Uwaga: analogia jest napięta. Zwykle Ralph dostanie DOKŁADNIE to, o co prosił - ale mechanika JAK to zostało uzyskane jest czymś, czego może się nie spodziewać.

Podkładka to kod, który zajmuje się pytaniem (przez „przechwytywanie”), ale nikt nie jest mądrzejszy. To jest ogólna koncepcja. Teraz powinieneś być w stanie przeczytać i zrozumieć wpis Wikipedii dotyczący podkładek.

BKSpurgeon
źródło
13

Jeśli chodzi o pochodzenie tego słowa, przytoczmy widżet 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

Wydaje się, że pasuje to całkiem dobrze do sposobu, w jaki projektanci stron internetowych używają tego terminu.

Thilo
źródło
12

Zgodnie z artykułem Microsoftu „Demystifying Shims” :

Jest to metafora oparta na angielskim słowie shim, które jest terminem inżynierskim używanym do opisania kawałka drewna lub metalu, który jest wstawiany między dwa obiekty, aby lepiej pasowały do ​​siebie. W programowaniu komputerowym podkładka to mała biblioteka, która w przejrzysty sposób przechwytuje API, zmienia przekazane parametry, obsługuje samą operację lub przekierowuje operację w inne miejsce. Podkładki mogą być również używane do uruchamiania programów na innych platformach oprogramowania niż zostały opracowane.

Interpretuję to w ten sposób, że podkładka jest ogólnym terminem dla dowolnej biblioteki kodu, która działa jako pośrednik i częściowo lub całkowicie zmienia zachowanie lub działanie programu. Jak prawdziwy pośrednik, może wpływać na dane przekazywane do tego programu lub wpływać na dane zwracane przez ten program.

W artykule wykorzystano interfejs API systemu Windows jako przykład i uznałem następujące zdanie za istotne:

Aplikacja jest na ogół nieświadoma, że ​​żądanie trafia do podkładki DLL zamiast do samego systemu Windows, a system Windows nie wie, że żądanie pochodzi ze źródła innego niż aplikacja (ponieważ podkładka DLL jest po prostu inną biblioteką DLL wewnątrz procesu aplikacji) .

Uogólniając ten cytat, dwa programy, które wytwarzają „chleb” z „kanapki z podkładką”, nie powinny być w stanie rozróżnić między rozmową z ich odpowiednikiem a rozmową z podkładką.

Jakie są zalety i wady stosowania podkładek?

Ponownie z artykułu:

Możesz naprawić aplikacje bez dostępu do kodu źródłowego lub bez ich zmiany. Ponosisz minimalną ilość dodatkowego obciążenia związanego z zarządzaniem ... iw ten sposób możesz naprawić rozsądną liczbę aplikacji. Wadą jest wsparcie, ponieważ większość dostawców nie obsługuje aplikacji z podkładkami. Nie da się naprawić każdej aplikacji za pomocą podkładek. Większość ludzi zazwyczaj bierze pod uwagę podkładki do aplikacji, w których sprzedawca jest poza biznesem, oprogramowanie nie jest wystarczająco strategiczne, aby wymagać wsparcia, lub po prostu chcą kupić trochę czasu.

W kontekście tego pytania terminy takie jak „proxy”, „adapter” i „fasada” mają większy sens (przynajmniej dla mnie) po przeczytaniu powyższego linku.

Richie Thomas
źródło
3

Jak mogliśmy zobaczyć w wielu odpowiedziach tutaj, podkładka jest rodzajem adaptera, który zapewnia funkcjonalność na poziomie API, która niekoniecznie była częścią tego API. Ten wątek ma wiele dobrych i pełnych odpowiedzi, więc nie będę dalej rozszerzać definicji.

Myślę jednak, że mogę dodać dobry przykład, którym jest Javascript ES5 Shim ( https://github.com/es-shims/es5-shim ):

Javascript bardzo się rozwinął w ciągu ostatnich kilku lat, a oprócz wielu innych zmian w specyfikacji języka, do jego podstawowych obiektów dodano wiele nowych metod.

Na przykład w specyfikacji ES2015 (aka ES5) metoda findzostała dodana do Arrayprototypu. Powiedzmy więc, że uruchamiasz swój kod przy użyciu silnika JavasScript wcześniejszego niż ta specyfikacja (np. Node 0.12), który jeszcze nie oferuje tej metody. Po załadowaniu podkładki ES5 te nowe metody zostaną dodane do Arrayprototypu, umożliwiając korzystanie z nich, nawet jeśli nie korzystasz z nowszej specyfikacji JavaScript.

Możesz zapytać: dlaczego ktoś miałby to robić zamiast aktualizować środowisko do nowszej wersji (powiedzmy, że Node 8)?

Istnieje wiele rzeczywistych scenariuszy, w których takie podejście ma sens. Dobry przykład:

Załóżmy, że masz starszy system, który działa w starym środowisku i musisz użyć takich nowych metod, aby zaimplementować / naprawić funkcjonalność. Aktualizacja środowiska nadal trwa, ponieważ występują problemy ze zgodnością, które wymagają wielu zmian w kodzie i testów (składnik krytyczny).

W tym przykładzie możesz spróbować stworzyć własną wersję takiej funkcjonalności, ale to uczyniłoby twój kod trudniejszym do odczytania, bardziej złożonym, może wprowadzić nowe błędy i wymagać wielu dodatkowych testów, aby objąć funkcjonalność, o której wiesz, że będzie będą dostępne w następnym wydaniu.

Zamiast tego możesz użyć tej podkładki i skorzystać z tych nowych metod, wykorzystując fakt, że ta poprawka / funkcjonalność będzie kompatybilna po aktualizacji, ponieważ już używasz metod znanych jako dostępne w następnej specyfikacji. I jest dodatkowy powód: ponieważ te metody są natywne dla następnej specyfikacji języka, istnieje duża szansa, że ​​będą działać szybciej niż jakakolwiek implementacja, którą mógłbyś zrobić, gdybyś próbował stworzyć własną wersję.

Inny prawdziwy scenariusz, w którym takie podejście jest mile widziane, dotyczy poziomu przeglądarki. Załóżmy, że potrzebujesz obsługi starej przeglądarki i chcesz skorzystać z tych nowszych funkcji. Javascript to język, który umożliwia dodawanie / modyfikowanie metod w jego podstawowych obiektach (np. Dodawanie metod do prototypu Array), a te biblioteki podkładek są wystarczająco inteligentne, aby dodawać takie metody tylko wtedy, gdy brakuje ich w bieżącej implementacji.

PS: 1) Zobaczysz termin „Polyfill” związany z tymi podkładkami Javascript. Polyfill to bardziej wyspecjalizowany typ podkładki, który jest używany w celu zapewnienia zgodności w przód w różnych specyfikacjach na poziomie przeglądarki. Nawiasem mówiąc, mój przykład powyżej odnosi się dokładnie do takiego przykładu.

2) Podkładki nie są ograniczone do tego przykładu (dodają funkcje, które będą dostępne w przyszłej wersji). Istnieją różne przypadki użycia, które również można by uznać za podkładkę.

3) Jeśli jesteś ciekawy, jak zaimplementowano ten konkretny polyfill, możesz otworzyć specyfikację Javascript Array.find i przewinąć do końca strony, na której znajdziesz kanoniczną implementację tej metody.

David Rissato Cruz
źródło
0

SHIM to kolejny poziom kontroli bezpieczeństwa, który jest wykonywany dla wszystkich usług w celu ochrony systemów nadrzędnych. Serwer SHIM sprawdza każde przychodzące żądanie za pomocą poświadczeń użytkownika nagłówka w odniesieniu do poświadczeń użytkownika, które są przekazywane w żądaniu (SOAP / RESTFUL).

Nirbhay Rana
źródło