Lorsque je suis confronté à une question comme celle-ci, je pense généralement à trois questions fondamentales.
- Qu'est-ce qui est le plus lisible ?
- Qu'est-ce qui permet une meilleure réutilisation du code ?
- Qu'est-ce qui est le plus efficace ?
Pas nécessairement dans cet ordre car cela dépend du scénario, mais je pense que dans ce cas, ces trois questions sont en faveur de l'option B.Si vous avez déjà eu besoin de modifier les options de createClient, vous devrez alors les modifier dans chaque fichier qui l'utilise. Ce qui dans l'option A est chaque fichier qui utilise redis, et l'option B est juste redis.js. De plus, si un produit plus récent ou différent sort et que vous souhaitez remplacer redis, il serait possible de faire de redis.js un wrapper pour un package différent ou même un client redis plus récent, ce qui réduirait considérablement le temps de conversion.
Les globaux sont généralement une mauvaise chose, mais dans cet exemple, redis.js ne devrait pas stocker d'état mutable, il n'y a donc aucun problème à avoir un global/singleton dans ce contexte.