Ho sempre pensato che un buon gestore patrimoniale dovrebbe avere diverse modalità operative. Molto probabilmente queste modalità sarebbero moduli sorgente separati che aderiscono a un'interfaccia comune. Le due modalità operative di base sarebbero:
- Modalità di produzione: tutti gli asset sono locali e privati di tutti i metadati
- Modalità di sviluppo: i test sono archiviati in un database (ad es. MySQL, ecc.) Con metadati aggiuntivi. Il database sarebbe un sistema a due livelli con un database locale che memorizza nella cache un database condiviso. I creatori di contenuti sarebbero in grado di modificare e aggiornare il database condiviso e gli aggiornamenti automaticamente proposti ai sistemi di sviluppo / QA. Dovrebbe anche essere possibile creare contenuti segnaposto. Poiché tutto è contenuto in un database, è possibile eseguire query sul database e generare report per analizzare lo stato della produzione.
Avresti bisogno di uno strumento in grado di catturare tutti i test dal database condiviso e creare il set di dati di produzione.
Nei miei anni come sviluppatore, non ho mai visto nulla di simile, anche se ho lavorato solo per una manciata di aziende, quindi il mio punto di vista non è davvero rappresentativo.
Aggiornare
OK, alcuni voti negativi. Espanderò su questo disegno.
In primo luogo, non hai davvero bisogno delle classi di fabbrica perché se hai:
TextureHandle tex = pRm->getResource<Texture>( "test.otx" );
conosci il tipo, quindi basta:
TextureHandle tex = new TextureHandle ("test.otx");
ma poi, quello che stavo cercando di dire sopra è che non avresti comunque usato nomi di file espliciti, la trama da caricare sarebbe specificata dal modello su cui la trama è usata, quindi in realtà non hai bisogno di un nome leggibile dall'uomo, potrebbe essere un valore intero a 32 bit, che è molto più facile da gestire per la CPU. Quindi, nel costruttore di TextureHandle avresti:
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 utilizza il parametro resource_id per trovare la posizione dei dati. Il modo in cui lo ha fatto dipenderà dall'ambiente in cui si esegue:
In sviluppo: lo stream cerca l'ID in un database (usando SQL per esempio) per ottenere un nome file e quindi apre il file, il file potrebbe essere memorizzato nella cache locale o estratto da un server se il file locale non esiste o è obsoleto.
Nella versione: lo stream cerca l'ID in una tabella chiave / valore per ottenere un offset / dimensione in un file grande e compresso (come il file WAD di Doom).