Что такое прокладка?

Что такое ШИМ?

7 ответов


Из Википедии:

в компьютерном программировании, a сим - небольшая библиотека, которая прозрачно перехватывает API, изменяет переданные параметры, обрабатывает саму операцию или перенаправляет операцию в другое место. Shims обычно возникают при изменении поведения API, что вызывает проблемы совместимости для старых приложений, которые по-прежнему полагаются на старые функции. В этих случаях старый API все еще может быть поддерживается тонким слоем совместимости поверх более нового кода. Оболочки также могут быть использованы для запуска программ на различных программных платформах, чем они были разработаны для.


термин "прокладка", как он определен в Википедии, технически будет классифицирован на основе его определения как" структурный " шаблон дизайна. Многие типы "структурных" шаблонов проектирования довольно четко описаны в (некоторые сказали бы defacto) объектно-ориентированных шаблонов проектирования программного обеспечения reference "шаблоны проектирования, элементы многоразового объектно-ориентированного программного обеспечения" более известный как "Банды Четырех".

на "Банды Четырех" текст очертания по крайней мере 3 хорошо установленных шаблонов, известных как "прокси", "адаптер" и "фасад", которые все обеспечивают функциональность типа "прокладка". В большинстве областей часто использование и / или упущение использования различных аббревиатур для одной и той же корневой концепции приводит к путанице. Использование слова " прокладка "для описания более конкретных" структурных " шаблонов проектирования "Прокси", "адаптер" и "фасад" конечно, это яркий пример такого типа ситуации. Шайба" это просто более общий термин для более конкретных типов "структурных" шаблонов "Прокси", "адаптер", "фасад" и, возможно, других.


что касается происхождения слова, quoth 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

это, кажется, вполне соответствует тому, как веб-дизайнеры используют этот термин.


прокладки используются в .net 4.5 Microsoft Fakes framework изолировать приложение от других сборок для модульного тестирования. Shims перенаправляет вызовы определенных методов в код, который вы пишете как часть своего теста


согласно статье Microsoft "Прояснение Прокладок":

Это метафора, основанная на английском языке слово shim, который является инженерный термин, используемый для описания куска дерева или металла, вставляется между двумя объектами, чтобы они лучше подходили друг к другу. В компьютерное программирование, прокладка небольшая библиотека которая прозрачно перехватывает API, изменяет переданные параметры, обрабатывает сама операция, или перенаправляет операцию в другом месте. Прокладки могут также использоваться для запуска программ на различных программных платформах, чем они были разработаны для.

я интерпретирую это так, что прокладка является общим термином для любой библиотеки кода, которая действует как посредник и частично или полностью изменяет поведение или работу программы. Как истинный посредник, он может влиять на данные, передаваемые в эту программу, или на данные, возвращаемые из этой программы.

в статье используется API Windows как пример, и я нашел следующее предложение уместным:

приложение, как правило, не знает, что запрос собирается shim DLL вместо самой Windows, и Windows не знает, что запрос поступает из источника, отличного от приложения (поскольку DLL shim - это просто еще одна DLL внутри процесса приложения).

чтобы обобщить эту цитату, две программы, которые делают "хлеб" из "сэндвича с прокладкой", не должны быть в состоянии чтобы различать разговоры со своей параллельной программой и разговоры с прокладкой.

какие плюсы и минусы использования проставок?

опять же, из статьи:

вы можете исправить приложения без доступа к исходному коду, или без вообще меняю их. Вы несете минимальную сумму дополнительных накладные расходы на управление... и вы можете исправить разумное количество заявок таким образом. Недостатком является поддержка как наиболее поставщики не поддерживают приложения shimmed. Ты не можешь исправить все. применение с помощью прокладок. Большинство людей обычно считают прокладки для приложения, в которых поставщик не работает, программное обеспечение не достаточно стратегических требует поддержки, или они просто хотят купить время.

в контексте этого вопроса такие термины, как" прокси"," адаптер "и" фасад", имеют больше смысла (по крайней мере для меня) после прочтения приведенной выше ссылки.


как мы могли видеть во многих ответах здесь, прокладка-это своего рода адаптер, который предоставляет функциональность на уровне API, которая не обязательно была частью этого API. Этот поток имеет много хороших и полных ответов, поэтому я не расширяю определение дальше.

однако, я думаю, что могу добавить хороший пример, который является JavaScript ES5 Shim (https://github.com/es-shims/es5-shim):

Javascript развивался много в течение последних нескольких лет, и среди многих другие изменения в спецификации языка, много новых методов были добавлены к его основным объектам.

например, в спецификации ES2015 (он же ES5) метод find добавлено Array прототип. Итак, предположим, вы используете свой код с помощью движка JavasScript до этой спецификации (например, Node 0.12), который еще не предлагает этот метод. При загрузке прокладки ES5 эти новые методы будут добавлены в Array прототип, позволяющий использовать их даже если вы не используете более новую спецификацию JavaScript.

вы можете спросить: почему кто-то делает это вместо обновления среды до более новой версии (скажем, узла 8)?

существует много реальных сценариев случаев, когда этот подход имеет смысл. Один хороший пример:

предположим, у вас есть устаревшая система, которая работает в старой среде, и вам нужно использовать такие новые методы для реализации/исправления функциональности. Обновление среда все еще работает, потому что есть проблемы совместимости, которые требуют много изменений кода и тестов (критический компонент).

в этом примере вы можете попытаться создать свою собственную версию такой функциональности, но это сделает ваш код сложнее для чтения, сложнее, может ввести новые ошибки и потребует тонны дополнительных тестов, чтобы охватить функциональность, которую вы знаете, что она будет доступна в следующем выпуске.

вместо этого вы можете использовать это прокладку и использовать эти новые методы, воспользовавшись тем, что это исправление / функциональность будет совместима после обновления, потому что вы уже используете методы, которые, как известно, будут доступны в следующей спецификации. И есть бонусная причина: поскольку эти методы являются родными для спецификации следующего языка, есть хороший шанс, что они будут работать быстрее, чем любая реализация, которую вы могли бы сделать, если бы попытались сделать свою собственную версию.

другое реальный сценарий где такой подход приветствуется на уровне браузера. Предположим, вам нужно поддерживать старый браузер и хотите воспользоваться этими новыми функциями. Javascript-это язык, который позволяет добавлять / изменять методы в своих основных объектах (например, добавлять методы в прототип массива), и эти библиотеки оболочек достаточно умны, чтобы добавлять такие методы, только если в текущей реализации их нет.

PS: 1) вы увидите термин "Polyfill", связанный с этими JavaScript shims. Polyfill-это более специализированный тип прокладки, который используется для обеспечения прямой совместимости в различных спецификациях уровня браузера. Кстати, мой пример выше относится именно к такому примеру.

2) прокладки не ограничены этим примером (добавление функциональности, которая будет доступна в будущем выпуске). Существуют различные варианты использования, которые также будут считаться прокладкой.

3) Если вам интересно, как реализуется этот конкретный polyfill, вы можете открыть Javascript массив.найти спецификации и прокрутите до конца страницы, где вы найдете каноническую реализацию для этого метода.


Если объяснение wiki убило некоторые клетки мозга, то, возможно, это может быть eaiser, чтобы понять:

общее объяснение концепции через мультфильм

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

резюме

прокладка-это какой-то код, который заботится о том, что спрашивается (путем "перехвата"), и никто не знает об этом. Это общая концепция. Пожалуйста, обратитесь к ответам выше для чего-то более технического.