He escuchado innumerables veces sobre las trampas de Singletons / globals, y entiendo por qué a menudo están mal vistos.
Lo que no entiendo es cuál es la alternativa elegante y no desordenada. Parece que la alternativa al uso de Singletons / globals siempre implica pasar objetos un millón de niveles hacia abajo a través de los objetos del motor hasta que lleguen a los objetos que los necesitan.
Por ejemplo, en mi juego, precargo algunos recursos cuando se inicia el juego. Estos recursos no se utilizan hasta mucho más tarde cuando el jugador navega por el menú principal y entra al juego. ¿Se supone que debo pasar estos datos de mi objeto Juego a mi objeto ScreenManager (a pesar de que solo una Pantalla realmente se preocupa por estos datos), luego al objeto Pantalla apropiado y en cualquier otro lugar?
Simplemente parece que estoy intercambiando datos de estado global por inyección de dependencia desordenada, pasando datos a objetos que ni siquiera se preocupan por los datos, excepto con el propósito de pasarlos a objetos secundarios.
¿Es este un caso en el que un Singleton sería algo bueno, o hay alguna solución elegante que me falta?