Quando affronto una domanda come questa, generalmente penso a tre domande fondamentali.
- Quale è più leggibile?
- Che consente un migliore riutilizzo del codice?
- Quale è più efficiente?
Non necessariamente in questo ordine in quanto dipende dallo scenario, ma credo che in questo caso tutte e tre queste domande siano a favore dell'opzione B. Se mai avessi bisogno di modificare le opzioni per createClient, dovresti quindi modificarle in ogni file che lo usa. Quale nell'opzione A è ogni file che utilizza redis e l'opzione B è solo redis.js. Inoltre, se esce un prodotto più nuovo o diverso e desideri sostituire redis, sarebbe possibile fare di redis.js un wrapper per un pacchetto diverso o anche un client redis più recente, riducendo notevolmente i tempi di conversione.
I globali sono generalmente una cosa negativa, ma in questo esempio redis.js non dovrebbe memorizzare lo stato mutabile, quindi non c'è problema ad avere un globale/singleton in questo contesto.