Sempre achei que um bom gerente de ativos deveria ter vários modos de operação. Esses modos provavelmente seriam módulos de origem separados, aderindo a uma interface comum. Os dois modos básicos de operação seriam:
- Modo de produção - todos os ativos são locais e sem todos os metadados
- Modo de Desenvolvimento - os testes são armazenados em um banco de dados (por exemplo, MySQL, etc) com metadados adicionais. O banco de dados seria um sistema de duas camadas com um banco de dados local armazenando em cache um banco de dados compartilhado. Os criadores de conteúdo poderão editar e atualizar o banco de dados compartilhado e as atualizações automaticamente propagadas para os sistemas de desenvolvedor / controle de qualidade. Também deve ser possível criar conteúdo de espaço reservado. Como tudo está em um banco de dados, é possível fazer consultas no banco de dados e gerar relatórios para analisar o estado da produção.
Você precisaria de uma ferramenta que possa obter todos os testes do banco de dados compartilhado e criar o conjunto de dados de produção.
Nos meus anos como desenvolvedor, nunca vi nada assim, embora tenha trabalhado apenas para um punhado de empresas, portanto minha visão não é realmente representativa.
Atualizar
OK, alguns votos negativos. Vou expandir esse design.
Primeiro, você realmente não precisa de aulas de fábrica, porque se você tem:
TextureHandle tex = pRm->getResource<Texture>( "test.otx" );
você conhece o tipo, então faça:
TextureHandle tex = new TextureHandle ("test.otx");
mas o que eu estava tentando dizer acima é que você não usaria nomes de arquivos explícitos, a textura a ser carregada seria especificada pelo modelo em que a textura é usada, para que você não precise realmente de um nome legível por humanos, poderia ser um valor inteiro de 32 bits, que é muito mais fácil para a CPU manipular. Portanto, no construtor para TextureHandle, você teria:
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
O AssetStream usa o parâmetro resource_id para encontrar a localização dos dados. A maneira como isso foi feito depende do ambiente em que você está executando:
Em desenvolvimento: o fluxo consulta o ID em um banco de dados (usando SQL, por exemplo) para obter um nome de arquivo e, em seguida, abre o arquivo, o arquivo pode ser armazenado em cache localmente ou extraído de um servidor se o arquivo local não existir ou for desatualizado.
Na liberação: o fluxo consulta o ID em uma tabela de chave / valor para obter um deslocamento / tamanho em um arquivo grande e compactado (como o arquivo WAD do Doom).