Я чую суперечливі думки, такі як:
- "Виділені класи менеджера майже ніколи не є правильним інженерним інструментом"
- "Виділені класи менеджера - це (зараз) найкращий спосіб вижити великий проект із тисячами ресурсів"
Візьмемо класичний клас ResourceManager, який має такі функціональні можливості:
- Завантажує об’єкти (текстури, звук, тривимірні моделі тощо)
- Забезпечує завантаження активів лише один раз, зберігаючи кеш
- Довідка підраховує активи, щоб визначити, чи можна їх розмістити
- Приховує, звідки походять фактичні активи (наприклад, це може бути один файл на актив, або всі активи в одному пакетному файлі, або активи можуть бути навіть завантажені по мережі)
- Можна перезавантажити активи без перезавантаження програми, що надзвичайно корисно для художників, які працюють над грою.
Давайте також візьмемо аргумент "одиночні кнопки погано" з таблиці , роблячи вигляд, що ці об'єкти ResourceManager не є одиночними, а замість цього передаються навколо ін'єкції залежності .
Тоді є аргумент «використовувати завод» або «називати це фабрикою». Моя проблема з цим полягає в тому, що так, це фабрика, але це також кеш і перезавантажувач (за відсутністю кращого слова). Називаючи це фабрикою, це не описує належним чином, і якщо я роблю це належним заводом, то де кешувати та перезавантажуватись реалізовуються?
Я погоджуюся, що класи "Менеджер" часто є симптомом поганої архітектури, але в цьому конкретному випадку, як це можна було реструктурувати і все-таки зберегти всю функціональність ? Це ситуація, коли клас "Менеджер" насправді доречний?