Я завжди думав, що хороший менеджер активів повинен мати кілька режимів роботи. Ці режими, швидше за все, будуть окремими вихідними модулями, що приєднуються до загального інтерфейсу. Два основних режими роботи:
- Режим виробництва - усі активи локальні та позбавлені всіх метаданих
- Режим розвитку - асети зберігаються в базі даних (наприклад, MySQL тощо) з додатковими метаданими. База даних буде дворівневою системою з локальною базою даних, кешуючи спільну базу даних. Творці вмісту зможуть редагувати та оновлювати спільну базу даних та оновлення, що автоматично надходять до систем розробника / QA. Слід також мати можливість створювати вміст заповнювачів. Оскільки все знаходиться в базі даних, на базі даних можна робити запити та формувати звіти для аналізу стану виробництва.
Вам знадобиться інструмент, який може захопити всі збірки із спільної бази даних та створити виробничий набір даних.
У свої роки як розробник я ніколи не бачив нічого подібного, хоча працював лише у кількох компаній, тому моя думка не є репрезентативною.
Оновлення
Гаразд, кілька негативних голосів. Я розширю на цю конструкцію.
По-перше, вам не потрібні фабричні заняття, тому що якщо у вас є:
TextureHandle tex = pRm->getResource<Texture>( "test.otx" );
ви знаєте тип, так що просто робіть:
TextureHandle tex = new TextureHandle ("test.otx");
але тоді, що я намагався сказати вище, це те, що ви б не використовували явні назви файлів, текстура для завантаження визначалася б моделлю, на якій використовується текстура, тож вам насправді не потрібно читати людського імені, це може бути 32-бітове ціле значення, що набагато простіше обробляти процесор. Отже, у конструкторі для TextureHandle у вас є:
if (texture already loaded)
update texture reference count
else
asset_stream = new AssetStream (resource_id)
asset_stream->ReadBytes
create texture
set texture ref count to 1
AssetStream використовує параметр resource_id для пошуку місця розташування даних. Як це зробити, це залежатиме від середовища, в якому ви працюєте:
У розробці: потік шукає ідентифікатор у базі даних (наприклад, використовуючи SQL), щоб отримати ім'я файлу, а потім відкриває файл, файл може бути кешований локально або витягнутий із сервера, якщо локальний файл не існує або є застарілий.
У випуску: потік шукає ідентифікатор у таблиці ключ / значення, щоб отримати зміщення / розмір у великому, упакованому файлі (як WAD-файл Doom).