Какое определение у Шима?
terminology
definition
vocabulary
shim
Nanook
источник
источник
Термин «прокладка», как он определен в Википедии, будет технически классифицирован на основе его определения как «структурный» шаблон проектирования. Множество типов «структурных» шаблонов проектирования достаточно четко описаны в (некоторые скажут, defacto) объектно-ориентированных шаблонах проектирования программного обеспечения. «Шаблоны проектирования, элементы многоразового объектно-ориентированного программного обеспечения», более известный как «Банда четырех». .
Текст «Банды четырех» описывает как минимум 3 хорошо известных шаблона, известных как «Прокси», «Адаптер» и «Фасад», которые обеспечивают функциональность типа «прокладка». В большинстве областей зачастую использование или сокращение разных акронимов для одной и той же корневой концепции часто приводит к путанице. Использование слова «прокладка» для описания более конкретных «структурных» шаблонов проектирования «Прокси» , «Адаптер» и «Фасад», безусловно, является ярким примером ситуации такого типа. «Шим» - это просто более общий термин для более специфических типов «Структурных» паттернов «Прокси», «Адаптер», «Фасад» и, возможно, других.
источник
Простое объяснение через мультфильм
Пример прокладки:
Резюме
Примечание: аналогия натянута. Обычно Ральф получит ТОЧНО то, о чем он просил, - но механика КАК это было получено - это то, чего он не мог ожидать.
Шим - это некоторый код, который заботится о том, что спросили (путем «перехвата»), и при этом никто не будет мудрее. Это общая концепция. Теперь вы должны быть в состоянии прочитать и понять запись в Википедии о прокладках.
источник
Что касается происхождения слова, quoth виджет Apple's Dictionary
Кажется, это вполне соответствует тому, как веб-дизайнеры используют этот термин.
источник
Оболочки используются в .net 4.5 Microsoft Fakes framework для изоляции вашего приложения от других сборок для модульного тестирования . Shims перенаправляет вызовы определенных методов в код, который вы пишете как часть вашего теста
источник
Согласно статье Microsoft «Демистификация Шимс» :
Я понимаю, что это означает, что shim - это общий термин для любой библиотеки кода, которая действует как посредник и частично или полностью меняет поведение или работу программы. Как настоящий посредник, он может влиять на данные, передаваемые в эту программу, или влиять на данные, возвращаемые из этой программы.
В статье в качестве примера используется Windows API, и я нашел следующее предложение актуальным:
Чтобы обобщить эту цитату, две программы, которые делают «хлеб» из «бутерброда с шимом», не должны различать общение со своей программой и разговор с шимом.
Каковы некоторые плюсы и минусы использования прокладок?
Опять же из статьи:
В контексте этого вопроса такие термины, как «прокси», «адаптер» и «фасад» имеют больше смысла (по крайней мере для меня) после прочтения вышеуказанной ссылки.
источник
Как мы могли видеть во многих ответах здесь, прокладка - это своего рода адаптер, который обеспечивает функциональность на уровне API, которая не обязательно была частью этого API. В этой теме много хороших и полных ответов, поэтому я не буду расширять определение дальше.
Тем не менее, я думаю, что могу добавить хороший пример, который является Javascript ES5 Shim ( https://github.com/es-shims/es5-shim ):
Javascript сильно изменился за последние несколько лет, и среди многих других изменений в спецификации языка было добавлено много новых методов в его основные объекты.
Например, в спецификации ES2015 (он же ES5) метод
find
был добавлен вArray
прототип. Итак, предположим, что вы выполняете свой код с использованием движка JavasScript до этой спецификации (например, Node 0.12), который пока не предлагает этот метод. При загрузке прокладки ES5 эти новые методы будут добавлены вArray
прототип, что позволит вам использовать их, даже если вы не используете более новую спецификацию JavaScript.Вы можете спросить: почему кто-то делает это вместо обновления среды до более новой версии (скажем, Node 8)?
Существует много реальных сценариев, в которых такой подход имеет смысл. Один хороший пример:
Допустим, у вас есть устаревшая система, которая работает в старой среде, и вам нужно использовать такие новые методы для реализации / исправления функциональности. Обновление вашей среды все еще находится в стадии разработки, поскольку существуют проблемы совместимости, которые требуют большого количества изменений кода и тестов (критический компонент).
В этом примере вы можете попытаться создать свою собственную версию такой функциональности, но это сделает ваш код труднее для чтения, более сложным, может привести к появлению новых ошибок и потребует тонны дополнительных тестов только для того, чтобы охватить функциональность, которая, как вы знаете, будет быть доступным в следующем выпуске.
Вместо этого вы можете использовать эту прокладку и использовать эти новые методы, используя тот факт, что это исправление / функциональность будет совместимым после обновления, поскольку вы уже используете методы, о которых известно, что они будут доступны в следующей спецификации. И есть бонусная причина: поскольку эти методы являются родными для следующей спецификации языка, есть большая вероятность, что они будут работать быстрее, чем любая реализация, которую вы могли бы сделать, если бы попытались создать свою собственную версию.
Другой реальный сценарий, где такой подход приветствуется, - на уровне браузера. Допустим, вам нужна поддержка старого браузера и вы хотите воспользоваться этими новыми функциями. Javascript - это язык, который позволяет добавлять / изменять методы в его основных объектах (например, добавлять методы в прототип Array), и эти библиотеки shim достаточно умны, чтобы добавлять такие методы, только если в текущей реализации их нет.
PS: 1) Вы увидите термин «Polyfill», связанный с этими прокладками Javascript. Polyfill - это более специализированный тип прокладок, который используется для обеспечения прямой совместимости в различных спецификациях уровня браузера. Кстати, мой пример выше относится именно к такому примеру.
2) Прокладки не ограничиваются этим примером (добавление функциональности, которая будет доступна в будущем выпуске). Существуют различные варианты использования, которые также считаются прокладкой.
3) Если вам интересно, как реализован этот конкретный полифильм, вы можете открыть спецификации Javascript Array.find и прокрутить до конца страницы, где вы найдете каноническую реализацию для этого метода.
источник
SHIM - это еще один уровень проверки безопасности, который выполняется для всех служб для защиты вышестоящих систем. Сервер SHIM проверяет каждый входящий запрос с учетными данными пользователя заголовков на соответствие учетным данным пользователя, которые передаются в запросе (SOAP / RESTFUL).
источник