In questi discorsi di Nicholas Zakas e Addy Osmani discutono l'idea di utilizzare il modello di facciata come sandbox quando si creano applicazioni Javascript su larga scala, al fine di separare l'applicazione dalle librerie di base sottostanti.Estratto di jQuery
Questo disaccoppiamento consentirebbe in teoria di cambiare una libreria di base senza dover riscrivere i moduli dell'applicazione. Tuttavia nella pratica questo sembra essere più difficile da attuare.
Esistono implementazioni concrete di questa architettura proposta, ad esempio AuraJS. Comunque guardando la fonte sembra che la sandbox abbia ancora delle astrazioni che perdono restituendo oggetti jQuery da alcuni dei suoi metodi.
Non mi interessa specificamente AuraJS, ma più il concetto generale di cercare di astrarre una libreria come jQuery senza perdere così tanta funzionalità.
Ad esempio, la mia facciata/sandbox ha un metodo dom .find(selector)
. Mi vengono in mente 3 opzioni per quello che potrebbe restituire:
Un oggetto jQuery - Questo sarebbe fuoriuscire jQuery fuori nei moduli che consumano.
Un elemento dom grezzo - Perdita di funzionalità, nessuno vuole davvero lavorare con questo! Nessuna catena.
Un wrapper personalizzato jQuery-like - Potrebbe essere piuttosto complesso, ma sembra la soluzione ideale.
Quindi la mia domanda è, come è possibile astratto una libreria come jQuery senza perdere troppo funzionalità, tale da poter essere sostituito ad un certo punto in futuro, con il minimo sforzo?
jQuery è abbastanza complicato internamente, creando un'astrazione tale da poter essere sostituito da qualsiasi (o anche da una) altra libreria sembra estremamente difficile. E qual è il punto? Se pensi che potresti voler scambiare le librerie in futuro, forse non dovresti usare quello che stai usando in primo luogo. – RobG
@RobG Sono d'accordo sembra difficile, ed è per questo che sto facendo la domanda. Per quanto le persone di gran lunga più intelligenti di me stiano facendo queste proposte e fornendo loro validi motivi (vedi i link ai discorsi forniti). –
Nell'architettura di Nicholas, se cambi la libreria di base, dovresti anche riscrivere il core dell'applicazione. Una volta superato il nucleo, non si sta più scrivendo il codice che utilizza la libreria. Se stai usando jQuery, la persona che scrive un modulo non scrive ** nessun ** jQuery. – RobG