Zawsze uważałem, że dobry zarządca aktywów powinien mieć kilka trybów działania. Te tryby najprawdopodobniej będą oddzielnymi modułami źródłowymi przylegającymi do wspólnego interfejsu. Dwa podstawowe tryby działania to:
- Tryb produkcji - wszystkie zasoby są lokalne i pozbawione wszystkich metadanych
- Tryb programowania - assesty są przechowywane w bazie danych (np. MySQL itp.) Z dodatkowymi metadanymi. Baza danych byłaby dwupoziomowym systemem z lokalną bazą danych buforującą współużytkowaną bazę danych. Twórcy treści mogliby edytować i aktualizować współużytkowaną bazę danych oraz aktualizacje automatycznie propagowane do systemów dla programistów / QA. Powinna również istnieć możliwość tworzenia treści zastępczych. Ponieważ wszystko znajduje się w bazie danych, w bazie danych można generować zapytania i generować raporty w celu analizy stanu produkcji.
Potrzebujesz narzędzia, które może pobrać wszystkie assesty ze współużytkowanej bazy danych i utworzyć produkcyjny zestaw danych.
Przez lata jako programista nigdy nie widziałem czegoś takiego, chociaż pracowałem tylko dla kilku firm, więc mój pogląd nie jest tak naprawdę reprezentatywny.
Aktualizacja
OK, trochę głosów negatywnych. Rozwinę ten projekt.
Po pierwsze, tak naprawdę nie potrzebujesz klas fabrycznych, ponieważ jeśli masz:
TextureHandle tex = pRm->getResource<Texture>( "test.otx" );
znasz typ, więc po prostu:
TextureHandle tex = new TextureHandle ("test.otx");
ale potem próbowałem powiedzieć powyżej, że i tak nie używałbyś jawnych nazw plików, tekstura do załadowania byłaby określona przez model, na którym tekstura jest używana, więc tak naprawdę nie potrzebujesz czytelnej dla człowieka nazwy, może to być 32-bitowa wartość całkowita, co znacznie ułatwia obsługę procesora. Tak więc w konstruktorze TextHandle miałbyś:
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 używa parametru resource_id do znalezienia lokalizacji danych. Sposób, w jaki to zrobił, byłby zależny od środowiska, w którym działasz:
W fazie rozwoju: strumień wyszukuje identyfikator w bazie danych (na przykład za pomocą SQL), aby uzyskać nazwę pliku, a następnie otwiera plik, plik może zostać buforowany lokalnie lub pobrany z serwera, jeśli plik lokalny nie istnieje lub jest przeterminowany.
W wersji: strumień wyszukuje identyfikator w tabeli klucz / wartość, aby uzyskać przesunięcie / rozmiar dużego, spakowanego pliku (takiego jak plik WAD Dooma).