I due trucchi con globali e singleton sono testabilità e schierabilità.
Per i test, ho visto troppe cinture di test troppo complesse solo per far fronte a una vita pianificata e singleton mal pianificata. Assicurati che qualsiasi oggetto di questo tipo abbia regole di avvio e smontaggio chiare e semplici.
Per quanto riguarda la deployabilità, ci sono due casi da considerare. In primo luogo, come vivrà il tuo oggetto globale? È in una libreria statica o dinamica? Se quell'oggetto globale viene riutilizzato per un plugin, otterrai copie extra? In secondo luogo, cosa succede quando quell'oggetto globale viene inserito in un'applicazione parallela? E 'thread-safe?
Nel complesso, immagino che queste ragioni significano che globals e singleton vengono usati solo eccezionalmente.