Я слышу противоречивые мнения, такие как:
- «Классы выделенного менеджера почти никогда не являются правильным инженерным инструментом»
- «Классы Dedicated Manager (в настоящее время) - лучший способ выжить в большом проекте с тысячами ресурсов»
Давайте возьмем классический класс ResourceManager, который имеет следующие функциональные возможности:
- Загружает ресурсы (текстуры, аудио, 3D-модели и т. Д.)
- Обеспечивает загрузку ресурсов только один раз, сохраняя кеш
- Ссылка подсчитывает активы, чтобы определить, могут ли они быть освобождены
- Скрывает, откуда взяты фактические активы (например, это может быть один файл на актив, или все активы в одном файле пакета, или активы могут быть даже загружены по сети)
- Можно перезагрузить ресурсы без перезапуска программы, что крайне полезно для художников, работающих над игрой.
Давайте также уберем аргумент «синглетоны - это плохо» , притворившись, что эти объекты ResourceManager не являются синглетонами, а вместо этого передаются через внедрение зависимостей .
Затем есть аргумент «использовать фабрику» или «назвать фабрику». Моя проблема с этим заключается в том, что да, это фабрика, но это также кеш и перегрузчик (из-за отсутствия лучшего слова). Называть это фабрикой не описывает это должным образом, и если я сделаю ее правильной фабрикой, то где же будет реализовано кэширование и перезагрузка?
Я согласен с тем, что классы «Менеджер» часто являются признаком плохой архитектуры, но в данном конкретном случае, как она может быть реструктурирована и при этом сохранить все функциональные возможности ? Это ситуация, когда класс «Менеджер» действительно уместен?