it-swarm-tr.com

Bir Shim nedir?

Bir Shim'in tanımı nedir?

102
Nanook

Wikipedia'dan:

Bilgisayar programlamasında, shim, bir API'yi saydam bir şekilde kesen, geçen parametreleri değiştiren, işlemin kendisini idare eden veya işlemi başka bir yere yönlendiren küçük bir kütüphanedir. Şimler, genellikle bir API'nin davranışı değiştiğinde ortaya çıkar, bu nedenle hala eski işlevlere dayanan eski uygulamalar için uyumluluk sorunlarına neden olur. Bu durumlarda, eski API hala yeni kodun üstündeki ince bir uyumluluk katmanı tarafından desteklenebilir. Şimler, geliştirildiklerinden farklı yazılım platformlarında programları çalıştırmak için de kullanılabilir.

79
Prasoon Saurav

Vikipedi'de tanımlandığı gibi "şim" terimi, teknik olarak, "Yapısal" tasarım deseni olarak tanımlanmasına dayanarak sınıflandırılır. Pek çok “Yapısal” tasarım şablonu (bazıları defacto diyebilir) nesne yönelimli yazılım tasarım desenleri referansında "Tasarım Modelleri, Yeniden Kullanılabilir Nesne Yönelimli Yazılımın Elemanları" olarak daha iyi tanımlanmaktadır. "Dörtlü Çete" .

"Dörtlü Çete" metin, tümü "şim" tipi işlevsellik sağlayan "Proxy", "Bağdaştırıcı" ve "Cephe" olarak bilinen en az 3 iyi düzenlenmiş örüntüyü gösterir. Çoğu alanda, insanların kafa karışıklığına neden olan aynı kök kavramı için farklı kısaltmalar kullanılmasının ve/veya kullanılmamasının sıklıkla zamanları. “Yapısal” tasarım desenlerini tanımlamak için “şim” kelimesini kullanarak "Proxy" , "Adaptör" ve "Cephe" kesinlikle Bu tür bir durumun açık bir örneği. Bir "şim", "Yapısal" kalıplar "Proxy", "Adaptör", "Cephe" ve muhtemelen diğerleri için daha spesifik olan terimler için daha genel bir terimdir.

73
Doug

Word'ün kökenlerine gelince, Apple'ın Sözlük widget'ını isteyin

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

Bu, web tasarımcılarının bu terimi nasıl kullandıklarına oldukça uygun görünüyor.

13
Thilo

Shnet .net 4.5'te kullanılmaktadır. Microsoft Fakes çerçevesi uygulamanızı ünite testleri için diğer meclislerden yalıtmak için . Shims, çağrılarınızı testinizin bir parçası olarak yazdığınız kodlama için belirli yöntemlere yönlendirir

11

Microsoft'un makalesine göre "Şimleri Demistizing" :

Bu, İngilizce olan Word shim'in temel aldığı bir metafordur. Bir ağaç veya metal parçasını tanımlamak için kullanılan mühendislik terimi. Birlikte daha iyi oturması için iki nesne arasına yerleştirilmiş İçinde bilgisayar programlama, bir şim şeffaf bir şekilde küçük bir kütüphanedir. Bir API'yi durdurur, geçirilen parametreleri değiştirir, işlemin kendisi veya işlemi başka bir yere yönlendirir. Şimler ayrıca programları çalıştırmak için onlardan farklı yazılım platformlarında kullanılmalıdır. için geliştirilmiştir.

Bunu bir şimin bir aracı olarak hareket eden ve bir programın davranışını veya çalışmasını kısmen veya tamamen değiştiren bir kod kütüphanesi için genel bir terim olduğu anlamına geldiğini yorumluyorum. Gerçek bir aracı gibi, o programa iletilen verileri veya programdan döndürülen verileri etkileyebilir.

Makale örnek olarak Windows API kullanıyor ve aşağıdaki cümleyi ilgili buldum:

Başvuru, genellikle isteğin bir adrese gideceğinin farkında değildir. shim DLL Windows yerine, ve Windows 'un haberi olduğunun farkında değil. istek uygulamadan başka bir kaynaktan geliyor (çünkü shim DLL başka bir DLL uygulamanın işlemi içinde).

Bu alıntıyı genelleştirmek için, "salamlı sandviç" in "ekmeğini" yapan iki program, kendi muhatap programlarıyla konuşma ile salakla konuşma arasında ayrım yapamaz.

Şim kullanmanın artıları ve eksileri nelerdir?

Yine, makaleden:

Kaynak koduna erişmeden veya .__ olmadan uygulamaları düzeltebilirsiniz. onları hiç değiştirmeden. Minimum miktarda ek yönetim yükü ... ve sen bir .__ düzeltebilirsiniz. makul sayıda uygulama bu şekilde. Olumsuz tarafı destek olarak. çoğu satıcı shimmed uygulamaları desteklememektedir. Her birini düzeltemezsin. Şim kullanarak uygulama. Çoğu insan, .__ için şimi dikkate alır. satıcının işsiz kaldığı uygulamalar ise, yazılım değildir. Desteği gerektirecek kadar stratejik, ya da sadece biraz almak istiyorlar. saati.

Bu soru bağlamında, "proxy", "bağdaştırıcı" ve "cephe" gibi terimler yukarıdaki bağlantıyı okuduktan sonra daha anlamlı hale gelir (en azından benim için).

9
Richie Thomas

Genel Konsept - Karikatürle Basit Açıklama

Bir şim örneği:

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

özet

Bir şim, kimsenin bu konuda daha akıllıca davranmadan ne istediğini (“ele geçirme” ile) ilgilenen bir koddur. Genel kavram budur. Lütfen daha teknik bir şey için yukarıdaki cevaplara bakın.

6
BKSpurgeon

Buradaki birçok yanıtta görebileceğimiz gibi, bir şim, API düzeyinde mutlaka o API'nin bir parçası olmayan işlevsellik sağlayan bir tür adaptördür. Bu konu çok iyi ve eksiksiz cevaplar içeriyor, bu yüzden tanımı daha fazla genişletmiyorum.

Ancak, Javascript ES5 Shim ( https://github.com/es-shims/es5-shim ) olan iyi bir örnek ekleyebilirim.

Javascript son birkaç yıl içinde çok gelişti ve dil spesifikasyonunda yapılan diğer birçok değişiklikle birlikte, çekirdek nesnelerine birçok yeni yöntem eklendi.

Örneğin, ES2015 spesifikasyonunda (aka ES5), find yöntemi Array prototipine eklenmiştir. Diyelim ki kodunuzu, bu spesifikasyondan önce bir JavasScript motoru kullanarak çalıştırıyorsunuzdur (ör. Henüz Node 0.12). ES5 şimini yükleyerek, bu yeni yöntemler Array prototipine eklenecek ve daha yeni bir JavaScript özelliği kullanmasanız bile bunları kullanmanıza olanak sağlayacak.

Sorabilirsiniz: ortamı neden daha yeni bir sürüme yükseltmek yerine neden bunu yapsın?

Bu yaklaşımın mantıklı olduğu birçok gerçek senaryo vardır. İyi bir örnek:

Eski bir ortamda çalışan eski bir sisteminiz olduğunu ve bir işlevselliği uygulamak/düzeltmek için böyle yeni yöntemler kullanmanız gerektiğini varsayalım. Ortamınızın yükseltilmesi hala devam eden bir çalışmadır çünkü birçok kod değişikliği ve test gerektiren (kritik bir bileşen) uyumluluk sorunları vardır.

Bu örnekte, bu tür bir işlevsellik kendi versiyonunuzu oluşturmaya çalışabilirsiniz, ancak bu kodunuzu okumayı zorlaştırır, daha karmaşık hale getirir, yeni hatalar ortaya çıkarır ve bileceğiniz bir işlevi kapsayacak tonlarca ek test gerektirir. Bir sonraki sürümde hazır olmak.

Bunun yerine, bu düzeltmeyi kullanabilirsiniz ve bu düzeltmenin/işlevselliğin yükseltme sonrasında uyumlu olması gerçeğinden yararlanarak bu yeni yöntemlerden yararlanabilirsiniz, çünkü bir sonraki belirtimde mevcut olduğu bilinen yöntemleri zaten kullanıyorsunuz. Ve bunun bir bonus nedeni var: bu yöntemler bir sonraki dil spesifikasyonuna özgü olduğundan, kendi versiyonunuzu oluşturmaya çalıştıysanız, yapabilecekleri herhangi bir uygulamadan daha hızlı çalışabilmeleri için iyi bir şans var.

Bu tür bir yaklaşımın memnuniyetle karşılandığı başka bir gerçek senaryo tarayıcı düzeyindedir. Eski tarayıcıyı desteklemeniz gerektiğini ve bu yeni özelliklerden yararlanmak istediğinizi varsayalım. Javascript, temel nesnelerine yöntemler eklemenize/değiştirmenize izin veren bir dildir (Array prototipine yöntemler ekleme gibi) ve bu shim kütüphaneleri, yalnızca mevcut uygulamada bulunmuyorsa, bu tür yöntemler eklemek için yeterince akıllıdır. 

PS: 1) Bu Javascript şimlerine ilişkin "Polyfill" terimini göreceksiniz. Polyfill, farklı tarayıcı seviyesi özelliklerinde ileriye dönük uyumluluk sağlamak için kullanılan daha uzmanlaşmış bir türdür. Bu arada, yukarıdaki örneğim tam olarak bu örneğe gönderme yapıyor.

2) Şimler bu örnekle sınırlı değildir (gelecekteki bir sürümde kullanılabilecek işlevler eklemek). Aynı zamanda bir sümük sayılabilecek farklı kullanım durumları da var.

3) Bu özel polyfillin nasıl uygulandığını merak ediyorsanız Javascript Array.find specs sayfasını açabilir ve sayfanın sonuna gidip bu yöntem için kanonik bir uygulama bulabilirsiniz.

3

SHIM, yukarı havza sistemlerini korumak için tüm hizmetler için yapılan başka bir güvenlik kontrolü seviyesidir. SHIM Sunucusu, gelen tüm istekleri, Üstbilgi Kullanıcı kimlik bilgileriyle, istekte iletilen kullanıcı kimlik bilgilerine göre (SOAP/RESTFUL) doğrular.

0
Nirbhay Rana