Když čelím otázce, jako je tato, obecně přemýšlím o třech základních otázkách.
- Co je čitelnější?
- Co umožňuje lepší opětovné použití kódu?
- Co je efektivnější?
Ne nutně v tomto pořadí, protože to závisí na scénáři, ale věřím, že v tomto případě jsou všechny tři tyto otázky ve prospěch možnosti B. Pokud jste někdy potřebovali upravit možnosti pro createClient, museli byste je upravit v každém souboru která to používá. Což v možnosti A je každý soubor, který používá redis, a možnost B je jen redis.js. Také pokud vyjde novější nebo jiný produkt a chcete nahradit redis Bylo by možné vytvořit z redis.js obal pro jiný balíček nebo dokonce novějšího klienta redis podstatně zkrátit dobu konverze.
Globals jsou obecně špatná věc, ale v tomto příkladu by redis.js neměl ukládat proměnlivý stav, takže v tomto kontextu není problém mít global/singleton.