Jaka jest definicja podkładki?
terminology
definition
vocabulary
shim
Nanook
źródło
źródło
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.
źródło
Proste wyjaśnienie za pośrednictwem kreskówki
Przykład podkładki:
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.
źródło
Jeśli chodzi o pochodzenie tego słowa, przytoczmy widżet Apple Dictionary
Wydaje się, że pasuje to całkiem dobrze do sposobu, w jaki projektanci stron internetowych używają tego terminu.
źródło
Podkładki są używane w platformie .NET 4.5 Fakes firmy Microsoft w celu odizolowania aplikacji od innych zestawów na potrzeby testów jednostkowych . Shims przekierowuje wywołania do określonych metod kodu, który piszesz jako część testu
źródło
Zgodnie z artykułem Microsoftu „Demystifying Shims” :
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:
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:
W kontekście tego pytania terminy takie jak „proxy”, „adapter” i „fasada” mają większy sens (przynajmniej dla mnie) po przeczytaniu powyższego linku.
źródło
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
find
została dodana doArray
prototypu. 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 doArray
prototypu, 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.
źródło
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).
źródło