Я слышал бесчисленное количество раз о ловушках синглетонов / глобалов, и я понимаю, почему их так часто осуждают.
Чего я не понимаю, так это элегантной, не грязной альтернативы. Кажется, что альтернатива использованию Singletons / globals всегда включает пропускание объектов на миллион уровней вниз через объекты вашего движка, пока они не достигнут объектов, которые в них нуждаются.
Например, в моей игре я предварительно загружаю некоторые ресурсы при запуске игры. Эти активы не используются намного позже, когда игрок перемещается по главному меню и входит в игру. Должен ли я передавать эти данные из моего объекта Game, в мой объект ScreenManager (несмотря на тот факт, что только один экран действительно заботится об этих данных), затем в соответствующий объект Screen и где-либо еще?
Просто кажется, что я обмениваю данные о глобальном состоянии на беспорядочную инъекцию зависимостей, передавая данные объектам, которые даже не заботятся о данных, кроме как с целью передачи их дочерним объектам.
Это тот случай, когда синглтон будет хорошей вещью, или есть какое-то элегантное решение, которое мне не хватает?