У меня много подсистем моей игры. Они могут использовать друг друга. Раньше я инициализировал и сохранял ссылки на подсистемы в статическом объекте Game вместо создания синглтона. Теперь я вижу, что Game имеет слишком много ссылок на другие классы и выглядит сбивающим с толку:
public static PlayerSettings PlayerSettings { get { return _playerSettings; } }
public static CommunityClient Community { get; private set; }
public static DatabaseConnectionWrapper Database { get; set; }
public static LoginConnectionWrapper LoginProtocolConnection { get; set; }
public static WorldEmulatorConnection WorldEmulatorConnection { get; set; }
public static WorldPlayerConnection WorldPlayerConnection { get; set; }
public static WorldConnection WorldConnection { get { return IsEmulatorMode ? (WorldConnection)WorldEmulatorConnection : WorldPlayerConnection; } }
public static MusicManager MusicManager { get; private set; }
public static SkyboxManager SkyboxManager { get; private set; }
public static VKInfo VK { get; private set; }
Что я могу с этим поделать? Мне не нужна абстракция для этих подсистем. И я не думаю, что синглтон подходит для этой ситуации - архитектура выглядит разбитой на части. Я хочу инициализировать все свои подсистемы в правильном порядке из одного места. Но существует слишком много ссылок на классы ...
ДОБАВЛЕНО
Глядя на DI - я могу отправлять зависимости конструктору класса и инициализировать каждый класс в статической фабрике. Это то, что я ищу.
Но я только что понял, что моя проблема в том, что когда я пытаюсь использовать объектно-компонентную архитектуру Unity3D, я не могу отправлять зависимости в конструктор, потому что инициализация класса вызывается из UnityEngine.
Итак, в этом случае мне нужен Singleton или Blob для хранения ссылок. если я выкину архитектуру Unity, я получу все зависимости от конструктора, и мне не понадобятся синглтоны или blob.
Мне нужно переделать мою архитектуру, чтобы UnityEngine не создавал объекты, которым нужно получать ссылки на подсистемы, но создавал эти классы из мой код и позволить им создавать свои «игровые объекты» UnityEngine и управлять ими.
The Blob
- см. sourcemaking.com/antipatterns/the-blob. Возможная альтернатива - подумать о том, что делают ваши классы; у вас может бытьPlayerManager
с настройками игрока, сообщества и входа,WorldManager
со всеми мировыми классами иEnvironmentManager
для связанных классов. Каждый из них разбивает вашу проблему на более управляемые части. Затем вы также можете начать применять SRP - en.wikipedia.org/wiki/Single_responsibility_principle - person dash   schedule 09.06.2013