Em nosso aplicativo, estamos criando arquivos Xml com um atributo que possui um valor Guid. Esse valor precisava ser consistente entre as atualizações de arquivo. Portanto, mesmo que tudo o mais no arquivo seja alterado, o valor guid para o atributo deve permanecer o mesmo.
Uma solução óbvia era criar um dicionário estático com o nome do arquivo e os Guids a serem usados para eles. Então, sempre que geramos o arquivo, procuramos o nome do arquivo no dicionário e usamos o guid correspondente. Mas isso não é viável porque podemos escalar para centenas de arquivos e não queremos manter uma grande lista de guias.
Portanto, outra abordagem era tornar o Guid o mesmo com base no caminho do arquivo. Visto que nossos caminhos de arquivo e estrutura de diretório de aplicativo são exclusivos, o Guid deve ser exclusivo para esse caminho. Portanto, cada vez que executamos uma atualização, o arquivo obtém o mesmo guid com base em seu caminho. Eu encontrei uma maneira legal de gerar esses ' Guias Determinísticos ' (Obrigado Elton Stoneman). Basicamente, ele faz isso:
private Guid GetDeterministicGuid(string input)
{
//use MD5 hash to get a 16-byte hash of the string:
MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();
byte[] inputBytes = Encoding.Default.GetBytes(input);
byte[] hashBytes = provider.ComputeHash(inputBytes);
//generate a guid from the hash:
Guid hashGuid = new Guid(hashBytes);
return hashGuid;
}
Assim, dada uma string, o Guid será sempre o mesmo.
Existem outras abordagens ou maneiras recomendadas de fazer isso? Quais são os prós ou contras desse método?