Apa definisi Shim?
terminology
definition
vocabulary
shim
Nanook
sumber
sumber
Jawaban:
Dari Wikipedia:
sumber
Istilah "shim" sebagaimana didefinisikan di Wikipedia secara teknis diklasifikasikan, berdasarkan definisinya, sebagai pola desain "Struktural". Banyak jenis pola desain "Struktural" yang cukup jelas dijelaskan dalam (beberapa akan mengatakan defacto) referensi pola desain perangkat lunak berorientasi objek "Pola Desain, Elemen Perangkat Lunak Berorientasi Objek yang Dapat Digunakan Kembali" lebih dikenal sebagai "Gang of Four" .
The "Gang of Four" garis teks setidaknya 3 pola mapan dikenal sebagai, "Proxy", "Adapter" dan "Facade" yang semuanya memberi “shim” fungsi jenis. Di sebagian besar bidang, sering kali penggunaan dan atau kesalahan penggunaan akronim yang berbeda untuk konsep dasar yang sama menyebabkan kebingungan orang. Menggunakan kata "shim" untuk mendeskripsikan pola desain "Struktural" yang lebih spesifik " Proxy" , "Adaptor", dan "Fasad" tentu saja merupakan contoh jelas dari jenis situasi ini. Sebuah "shim" hanyalah istilah yang lebih umum untuk jenis yang lebih spesifik dari pola "Struktural" "Proxy", "Adapter", "Facade" dan mungkin lainnya.
sumber
Penjelasan Sederhana melalui Kartun
Contoh shim:
Ringkasan
Sebuah shim adalah beberapa kode yang menangani apa yang diminta (dengan 'intersepsi'), tanpa ada yang lebih bijak tentangnya.
Catatan: Seperti kebanyakan analogi, ini tidak sempurna: biasanya Ralph akan mendapatkan PERSIS apa yang dia minta - tetapi mekanisme BAGAIMANA hal itu diperoleh adalah sesuatu yang Ralph tidak pedulikan.
Contoh Shim
Contoh shim adalah rbenv (alat ruby yang rapi). Panggilan ke perintah ruby adalah "shimmed". yaitu ketika Anda menjalankan
bundle install
, rbenv mencegat pesan itu, dan merutekan ulang sesuai dengan versi tertentu dari Ruby yang Anda jalankan. Jika itu tidak masuk akal, pikirkan saja ibu dewa peri yang menyadap pesan dan memberikan hasil yang tepat.sumber
Adapun asal kata, mengutip widget Kamus Apple
Ini tampaknya sangat cocok dengan bagaimana desainer web menggunakan istilah tersebut.
sumber
Shims digunakan dalam kerangka kerja .net 4.5 Microsoft Fakes untuk mengisolasi aplikasi Anda dari rakitan lain untuk pengujian unit . Shims mengalihkan panggilan ke metode tertentu ke kode yang Anda tulis sebagai bagian dari pengujian Anda
sumber
Menurut artikel Microsoft "Demystifying Shims" :
Saya menafsirkan ini berarti bahwa shim adalah istilah umum untuk pustaka kode apa pun yang bertindak sebagai perantara dan sebagian atau seluruhnya mengubah perilaku atau pengoperasian program. Seperti perantara sejati, ini dapat memengaruhi data yang diteruskan ke program itu, atau memengaruhi data yang dikembalikan dari program itu.
Artikel tersebut menggunakan Windows API sebagai contoh, dan saya menemukan kalimat berikut ini relevan:
Untuk menggeneralisasi kutipan ini, dua program yang membuat "roti" dari "sandwich shim" seharusnya tidak dapat membedakan antara berbicara dengan program mitra mereka dan berbicara dengan shim.
Apa saja pro dan kontra menggunakan shims?
Sekali lagi, dari artikel:
Dalam konteks pertanyaan ini, istilah seperti "proxy", "adaptor", dan "fasad" menjadi lebih masuk akal (setidaknya bagi saya) setelah membaca tautan di atas.
sumber
Seperti yang bisa kita lihat dalam banyak respons di sini, shim adalah semacam adaptor yang menyediakan fungsionalitas pada level API yang belum tentu menjadi bagian dari API itu. Utas ini memiliki banyak tanggapan yang baik dan lengkap, jadi saya tidak akan memperluas definisi lebih jauh.
Namun, saya rasa saya bisa menambahkan contoh yang bagus, yaitu Javascript ES5 Shim ( https://github.com/es-shims/es5-shim ):
Javascript telah berkembang pesat selama beberapa tahun terakhir, dan di antara banyak perubahan lain pada spesifikasi bahasa, banyak metode baru telah ditambahkan ke objek intinya.
Misalnya, dalam spesifikasi ES2015 (alias ES5), metode
find
tersebut telah ditambahkan keArray
prototipe. Jadi katakanlah Anda menjalankan kode Anda menggunakan mesin JavasScript sebelum spesifikasi ini (contoh: Node 0.12) yang belum menawarkan metode itu. Dengan memuat shim ES5, metode baru ini akan ditambahkan keArray
prototipe, memungkinkan Anda untuk menggunakannya bahkan jika Anda tidak menjalankan spesifikasi JavaScript yang lebih baru.Anda mungkin bertanya: mengapa seseorang melakukan itu daripada mengupgrade lingkungan ke versi yang lebih baru (katakanlah Node 8)?
Ada banyak skenario kasus nyata di mana pendekatan tersebut masuk akal. Satu contoh bagus:
Katakanlah Anda memiliki sistem lama yang berjalan di lingkungan lama, dan Anda perlu menggunakan metode baru tersebut untuk mengimplementasikan / memperbaiki fungsionalitas. Upgrade lingkungan Anda masih dalam proses karena ada masalah kompatibilitas yang memerlukan banyak perubahan kode dan pengujian (komponen penting).
Dalam contoh ini, Anda dapat mencoba membuat versi Anda sendiri dari fungsionalitas tersebut, tetapi itu akan membuat kode Anda lebih sulit dibaca, lebih kompleks, dapat memperkenalkan bug baru dan akan membutuhkan banyak tes tambahan hanya untuk mencakup fungsionalitas yang Anda tahu itu akan terjadi. tersedia di rilis berikutnya.
Sebaliknya, Anda dapat menggunakan shim ini dan memanfaatkan metode baru ini, memanfaatkan fakta bahwa perbaikan / fungsionalitas ini akan kompatibel setelah peningkatan, karena Anda sudah menggunakan metode yang diketahui tersedia dalam spesifikasi berikutnya. Dan ada alasan bonus: karena metode ini asli untuk spesifikasi bahasa berikutnya, ada kemungkinan besar metode ini akan berjalan lebih cepat daripada implementasi apa pun yang dapat Anda lakukan jika Anda mencoba membuat versi sendiri.
Skenario nyata lainnya di mana pendekatan semacam itu disambut baik di tingkat browser. Katakanlah Anda perlu mendukung browser lama dan ingin memanfaatkan fitur-fitur yang lebih baru ini. Javascript adalah bahasa yang memungkinkan Anda untuk menambahkan / memodifikasi metode dalam objek intinya (seperti menambahkan metode ke prototipe Array), dan pustaka shim tersebut cukup pintar untuk menambahkan metode tersebut hanya jika implementasi saat ini kurang dari mereka.
PS: 1) Anda akan melihat istilah "Polyfill" terkait dengan shim Javascript ini. Polyfill adalah jenis shim yang lebih khusus yang digunakan untuk menyediakan kompatibilitas ke depan dalam spesifikasi tingkat browser yang berbeda. Omong-omong, contoh saya di atas mengacu pada contoh seperti itu.
2) Shim tidak terbatas pada contoh ini (menambahkan fungsionalitas yang akan tersedia di rilis mendatang). Ada beberapa kasus penggunaan berbeda yang akan dianggap ganjil juga.
3) Jika Anda penasaran tentang bagaimana polyfill spesifik ini diimplementasikan, Anda dapat membuka spesifikasi Javascript Array.find dan menggulir ke akhir halaman di mana Anda akan menemukan implementasi kanonik untuk metode ini.
sumber
SHIM adalah tingkat pemeriksaan keamanan lain yang dilakukan untuk semua layanan, untuk melindungi sistem hulu. SHIM Server memvalidasi setiap permintaan yang masuk, dengan kredensial Pengguna Header, terhadap kredensial pengguna, yang diteruskan dalam permintaan (SOAP / RESTFUL).
sumber