Dans notre application, nous créons des fichiers Xml avec un attribut qui a une valeur Guid. Cette valeur doit être cohérente entre les mises à jour du fichier. Ainsi, même si tout le reste du fichier change, la valeur Guid de l'attribut doit rester la même.
Une solution évidente consistait à créer un dictionnaire statique contenant les noms de fichiers et les Guids à utiliser pour ceux-ci. Ensuite, chaque fois que nous générons le fichier, nous consultons le dictionnaire pour le nom de fichier et utilisons le guide correspondant. Mais ce n'est pas faisable car nous pourrions passer à des centaines de fichiers et nous ne voulons pas maintenir une grande liste de guides.
Une autre approche consistait donc à rendre le Guid identique en fonction du chemin du fichier. Puisque nos chemins de fichiers et la structure du répertoire de l'application sont uniques, le guide devrait être unique pour ce chemin. Ainsi, chaque fois que nous exécutons une mise à jour, le fichier reçoit le même guide en fonction de son chemin. J'ai trouvé une façon sympa de générer de tels ' Guides déterministes (Merci Elton Stoneman). En gros, cela donne ceci :
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;
}
Ainsi, étant donné une chaîne de caractères, le Guid sera toujours le même.
Y a-t-il d'autres approches ou d'autres méthodes recommandées pour ce faire ? Quels sont les avantages ou les inconvénients de cette méthode ?