Siempre he pensado que un buen administrador de activos debería tener varios modos de operación. Es muy probable que estos modos sean módulos fuente separados que se adhieran a una interfaz común. Los dos modos básicos de operación serían:
- Modo de producción: todos los activos son locales y despojados de todos los metadatos
- Modo de desarrollo: las evaluaciones se almacenan en una base de datos (por ejemplo, MySQL, etc.) con metadatos adicionales. La base de datos sería un sistema de dos niveles con una base de datos local que almacena en caché una base de datos compartida. Los creadores de contenido podrían editar y actualizar la base de datos compartida y las actualizaciones automáticamente propagadas a los sistemas de desarrollador / control de calidad. También debería ser posible crear contenido de marcador de posición. Como todo está en una base de datos, se pueden realizar consultas en la base de datos y generar informes para analizar el estado de la producción.
Necesitaría una herramienta que pueda tomar todas las evaluaciones de la base de datos compartida y crear el conjunto de datos de producción.
En mis años como desarrollador, nunca he visto algo así, aunque solo he trabajado para un puñado de empresas, por lo que mi punto de vista no es realmente representativo.
Actualizar
OK, algunos votos negativos. Ampliaré este diseño.
En primer lugar, realmente no necesitas clases de fábrica porque si tienes:
TextureHandle tex = pRm->getResource<Texture>( "test.otx" );
sabes el tipo, así que solo hazlo:
TextureHandle tex = new TextureHandle ("test.otx");
pero luego, lo que estaba tratando de decir anteriormente es que no usarías nombres de archivo explícitos de todos modos, la textura para cargar estaría especificada por el modelo en el que se usa la textura, por lo que no necesitas un nombre legible por humanos, podría ser un valor entero de 32 bits, que es mucho más fácil de manejar para la CPU. Entonces, en el constructor de TextureHandle tendrías:
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 usa el parámetro resource_id para encontrar la ubicación de los datos. La forma en que lo hizo dependería del entorno en el que se esté ejecutando:
En Desarrollo: la secuencia busca la ID en una base de datos (usando SQL, por ejemplo) para obtener un nombre de archivo y luego abre el archivo, el archivo podría almacenarse en caché localmente o extraerse de un servidor si el archivo local no existe o es fuera de plazo.
En la versión: la secuencia busca la ID en una tabla de clave / valor para obtener un desplazamiento / tamaño en un archivo grande y empaquetado (como el archivo WAD de Doom).