Nella nostra applicazione stiamo creando file Xml con un attributo che ha un valore Guid. Questo valore doveva essere coerente tra gli aggiornamenti dei file. Quindi, anche se tutto il resto nel file cambia, il valore guid per l'attributo dovrebbe rimanere lo stesso.
Una soluzione ovvia è stata creare un dizionario statico con il nome del file e le guide da utilizzare per loro. Quindi ogni volta che generiamo il file, cerchiamo nel dizionario il nome del file e utilizziamo il guid corrispondente. Ma questo non è fattibile perché potremmo scalare fino a centinaia di file e non volevamo mantenere un lungo elenco di guide.
Quindi un altro approccio è stato quello di rendere il Guid lo stesso in base al percorso del file. Poiché i nostri percorsi dei file e la struttura della directory dell'applicazione sono univoci, il Guid dovrebbe essere univoco per quel percorso. Quindi ogni volta che eseguiamo un aggiornamento, il file ottiene lo stesso guid in base al suo percorso. Ho trovato un modo fantastico per generare tali " Guide deterministiche " (Grazie Elton Stoneman). Fondamentalmente fa questo:
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;
}
Quindi data una stringa, il Guid sarà sempre lo stesso.
Esistono altri approcci o modi consigliati per farlo? Quali sono i pro o i contro di questo metodo?