Le parole "wrapper" e "shim" sono più o meno sinonimi o c'è una distinzione, forse connotativa?
Le parole "wrapper" e "shim" sono più o meno sinonimi o c'è una distinzione, forse connotativa?
Uno shim è tipicamente qualcosa scritto specificamente per mantenere la compatibilità all'indietro. Ad esempio, se hai due versioni di un'API, la versione 1 e la versione 2, invece di mantenere la versione 1 indipendentemente dalla versione 2, potresti scrivere uno shim che intercetta le chiamate alla versione 1 dell'API , traduce i parametri in base a ciò che richiede la versione 2, quindi restituisce i risultati.
In genere, uno shim viene scritto dal fornitore dell'API, anziché dal consumatore.
Un wrapper è scritto dal consumatore di un'API ed è tipicamente scritto in modo che tu possa cambiare l'API sottostante senza che il resto del codice debba sapere. Ad esempio, potresti scrivere un wrapper del database in modo che tu possa parlare con MS SQL Server o Oracle, semplicemente cambiando i wrapper.
Ovviamente, come con qualsiasi terminologia, ci sono aree grigie, ma penso che le precedenti differenze coprano le principali differenze.
Leggi altre domande sui tag abstraction terminology