Yanıtlar:
Wikipedia'dan:
Bilgisayar programlamasında şim , bir API'yi şeffaf bir şekilde yakalayan, geçirilen parametreleri değiştiren, işlemin kendisini yöneten 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 ve böylece eski işlevlere hala 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, programları geliştirildiklerinden farklı yazılım platformlarında çalıştırmak için de kullanılabilir.
Wikipedia'da tanımlandığı gibi "şim" terimi, teknik olarak, tanımına bağlı olarak, "Yapısal" bir tasarım deseni olarak sınıflandırılır. "Yapısal" tasarım desenlerinin pek çok türü, (bazıları defacto diyebilir) nesne yönelimli yazılım tasarım desenlerinde daha iyi "Dörtlü Çete" olarak bilinen "Tasarım Desenleri, Yeniden Kullanılabilir Nesne Odaklı Yazılım Öğeleri" bölümünde açık bir şekilde açıklanmıştır .
"Çete Dörtler" en az 3 iyi kurulmuş desenler, "Vekil", "Adaptörü" ve tüm “pul” tipi işlevsellik sağlamak "Cephe" olarak bilinen metin hatlar. Çoğu alanda, aynı kök kavramı için insanların kafa karışıklığına neden olan farklı kısaltmaların kullanımı ve / veya kullanımı kaç kez kullanılır. Daha özel "Yapısal" tasarım desenleri "Vekil" , "Adaptör" ve "Cephe" tanımlamak için "shim" kelimesini kullanmak kesinlikle bu tür durumun açık bir örneğidir. "Şim" daha spesifik "Yapısal" desenler "Proxy", "Adaptör", "Cephe" ve muhtemelen diğerleri için daha genel bir terimdir.
Bir şim örneği:
Not: benzetme gerilmiştir. Genellikle Ralph tam olarak istediğini alacaktır - ancak NASIL elde edildiğinin mekaniği beklemeyebileceği bir şeydir.
Bir şim, kimsenin bu konuda daha akıllıca olmadan sorulanlarla ('arayarak') ilgilenen bir koddur. Genel kavram budur. Şimdi şimlerdeki wikipedia girişini okuyabilmeli ve anlayabilmelisiniz.
Kelimenin kökenleri gelince, Apple'ın Sözlük widget'ını çalıştırın
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 terimi nasıl kullandıklarına oldukça iyi uyuyor.
Şimler .net 4.5 Microsoft Fakes çerçevesinde uygulamanızı birim sınama amacıyla diğer derlemelerden ayırmak için kullanılır . Şimler, testinizin bir parçası olarak yazdığınız kodları aramak için aramaları belirli yöntemlere yönlendirir
Microsoft'un "Şimler Demystifying" makalesine göre :
Bu, iki nesnenin birbirine daha iyi oturması için yerleştirilmiş bir ahşap veya metal parçasını tanımlamak için kullanılan bir mühendislik terimi olan İngilizce dil şimine dayanan bir metafor. Bilgisayar programlamasında, şim, bir API'yi şeffaf bir şekilde yakalayan, geçirilen parametreleri değiştiren, işlemin kendisini yöneten veya işlemi başka bir yere yönlendiren küçük bir kütüphanedir. Şimler, programları geliştirildiklerinden farklı yazılım platformlarında çalıştırmak için de kullanılabilir.
Bunu, bir şimin, aracı olarak hareket eden ve bir programın davranışını veya çalışmasını kısmen veya tamamen değiştiren herhangi bir kod kütüphanesi için genel bir terim olduğu anlamına gelir. Gerçek bir aracı gibi, o programa aktarılan verileri veya o programdan döndürülen verileri etkileyebilir.
Makale, Windows API'yi örnek olarak kullanmaktadır ve aşağıdaki cümleyi alakalı buldum:
Uygulama genellikle isteğin Windows yerine bir shim DLL'e gittiğinin farkında değildir ve Windows, isteğin uygulama dışındaki bir kaynaktan geldiğinin farkında değildir (çünkü shim DLL, uygulamanın işlemi içindeki başka bir DLL'dir) .
Bu alıntıyı genelleştirmek için, "şim sandviç" in "ekmeğini" yapan iki program, muadil programlarıyla konuşmak ve şimle konuşmak arasında ayrım yapamaz.
Şimler kullanmanın bazı artıları ve eksileri nelerdir?
Yine, makaleden:
Uygulamaları kaynak koduna erişmeden veya hiç değiştirmeden düzeltebilirsiniz. Minimum miktarda ek yönetim yüküne maruz kalırsınız ... ve makul sayıda uygulamayı bu şekilde düzeltebilirsiniz. Dezavantajı çoğu satıcı yalpalanmış uygulamaları desteklemediğinden destek. Her uygulamayı şimler kullanarak düzeltemezsiniz. Çoğu kişi genellikle satıcının iş dışı olduğu, yazılımın destek gerektirecek kadar stratejik olmadığı veya sadece biraz zaman almak istediği uygulamalar için şimler düşünür.
Bu soru bağlamında, yukarıdaki bağlantıyı okuduktan sonra "proxy", "adaptör" ve "cephe" gibi terimler (en azından benim için) daha anlamlı olur.
Burada birçok yanıtta görebildiğimiz gibi, bir şim, API düzeyinde işlevsellik sağlayan ve bu API'nın bir parçası olmayan bir tür adaptördür. Bu iş parçacığının birçok iyi ve eksiksiz yanıtı var, bu yüzden tanımı daha da genişletmiyorum.
Ancak, Javascript ES5 Shim ( https://github.com/es-shims/es5-shim ) olan iyi bir örnek ekleyebileceğimi düşünüyorum :
Javascript son birkaç yılda çok gelişti ve dil spesifikasyonundaki diğer birçok değişiklik arasında, temel nesnelerine birçok yeni yöntem eklendi.
Örneğin, ES2015 spesifikasyonunda (aka ES5), yöntem prototipe find
eklenmiştir Array
. Diyelim ki kodunuzu bu spesifikasyondan önce bir JavasScript motoru kullanarak çalıştırıyorsunuz (ör: Düğüm 0.12) ve bu yöntemi henüz sunmuyor. ES5 şemasını yüklediğinizde, bu yeni yöntemler Array
prototipe eklenerek daha yeni bir JavaScript spesifikasyonunda çalışmıyor olsanız bile bunlardan yararlanmanıza olanak tanır.
Siz sorabilirsiniz: neden birisi ortamı daha yeni bir sürüme yükseltmek yerine bunu yapsın (diyelim ki Düğüm 8)?
Bu yaklaşımın mantıklı olduğu birçok gerçek durum senaryosu vardır. İyi bir örnek:
Diyelim ki eski bir ortamda çalışan eski bir sisteminiz var ve bir işlevselliği uygulamak / düzeltmek için bu tür yeni yöntemler kullanmanız gerekiyor. Çok sayıda kod değişikliği ve testi (kritik bir bileşen) gerektiren uyumluluk sorunları olduğundan ortamınızın yükseltilmesi hala devam etmekte olan bir çalışmadır.
Bu örnekte, kendi işlevinizi bu tür bir işlevsellik oluşturmaya çalışabilirsiniz, ancak bu kodunuzu okumayı zorlaştıracak, daha karmaşık hale getirecek, yeni hatalar getirebilir ve sadece bileceğiniz bir işlevselliği kapsamak için tonlarca ek test gerektirecektir. bir sonraki sürümde sunulacak.
Bunun yerine, bu düzeltmeyi kullanabilir ve bu yeni yöntemlerden yararlanarak, bu düzeltmenin / işlevselliğin yükseltmeden sonra uyumlu olacağı gerçeğinden yararlanabilirsiniz, çünkü bir sonraki spesifikasyonda mevcut olduğu bilinen yöntemleri zaten kullanıyorsunuz. Ve bir bonus nedeni var: Bu yöntemler bir sonraki dil spesifikasyonuna özgü olduğundan, kendi sürümünüzü oluşturmaya çalıştığınızda yapabileceğiniz herhangi bir uygulamadan daha hızlı çalışma şansı vardır.
Böyle bir yaklaşımın hoş karşılandığı bir diğer gerçek senaryo tarayıcı düzeyindedir. Diyelim ki eski tarayıcıyı desteklemeniz ve bu yeni özelliklerden yararlanmak istiyorsunuz. Javascript, çekirdek nesnelerine yöntem eklemenize / değiştirmenize izin veren bir dildir (Array prototipine yöntem ekleme gibi) ve bu şim kitaplıkları, yalnızca geçerli uygulamada eksikse bu yöntemleri eklemek için yeterince akıllıdır.
Not: 1) Bu Javascript şimler ile ilgili "Polyfill" terimini göreceksiniz. Polyfill, farklı tarayıcı seviyesi özelliklerinde ileri uyumluluk sağlamak için kullanılan daha özel bir şim türüdür. Bu arada, yukarıdaki örneğim tam olarak bu örneğe atıfta bulunuyor.
2) Şimler bu örnekle sınırlı değildir (gelecekteki bir sürümde kullanılabilecek işlevler ekleyerek). Şim olarak kabul edilebilecek farklı kullanım durumları vardır.
3) Bu özel çoklu dolgunun nasıl uygulandığını merak ediyorsanız, Javascript Array.find teknik özelliklerini açabilir ve sayfanın sonuna doğru bu yöntem için standart bir uygulama bulacağınız yere gidebilirsiniz .
SHIM, yukarı akış sistemlerini korumak için tüm hizmetler için yapılan başka bir güvenlik kontrolü düzeyidir. SHIM Sunucusu, gelen her isteği, Üstbilgi Kullanıcı kimlik bilgileriyle, istekte iletilen kullanıcı kimlik bilgileriyle (SOAP / RESTFUL) doğrular.