Ho sentito innumerevoli volte sulle insidie di Singletons / Global, e capisco perché sono così spesso disapprovati.
Quello che non capisco è quale sia l'alternativa elegante e non disordinata. Sembra che l'alternativa all'utilizzo di Singletons / globals implichi sempre il passaggio di oggetti di un milione di livelli attraverso gli oggetti del motore fino a quando non raggiungono gli oggetti che ne hanno bisogno.
Ad esempio, nel mio gioco, precarico alcune risorse all'avvio del gioco. Queste risorse non vengono utilizzate fino a molto tempo dopo, quando il giocatore naviga attraverso il menu principale ed entra nel gioco. Devo passare questi dati dal mio oggetto di gioco, al mio oggetto ScreenManager (nonostante il fatto che solo uno schermo si preoccupi effettivamente di questi dati), quindi all'oggetto schermo appropriato e in qualsiasi altro luogo?
Sembra solo che io stia scambiando dati sullo stato globale con un'iniezione di dipendenza ingombra, passando i dati ad oggetti a cui non interessano nemmeno i dati, tranne allo scopo di passarli a oggetti figlio.
È un caso in cui un Singleton sarebbe una buona cosa o c'è qualche soluzione elegante che mi manca?