En nuestra aplicación estamos creando archivos Xml con un atributo que tiene un valor Guid. Este valor debía ser coherente entre las actualizaciones de archivos. Entonces, incluso si todo lo demás en el archivo cambia, el valor de guid para el atributo debería permanecer igual.
Una solución obvia fue crear un diccionario estático con el nombre del archivo y las guías que se utilizarían para ellos. Luego, cada vez que generamos el archivo, buscamos en el diccionario el nombre del archivo y usamos el guid correspondiente. Pero esto no es factible porque podríamos escalar a cientos de archivos y no queríamos mantener una gran lista de guías.
Entonces, otro enfoque fue hacer que el Guid fuera el mismo en función de la ruta del archivo. Dado que nuestras rutas de archivo y la estructura del directorio de la aplicación son únicas, el Guid debe ser único para esa ruta. Entonces, cada vez que ejecutamos una actualización, el archivo obtiene la misma guía en función de su ruta. Encontré una manera genial de generar tales ' Guías deterministas ' (Gracias Elton Stoneman). Básicamente hace esto:
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;
}
Entonces, dada una cadena, el Guid siempre será el mismo.
¿Existen otros enfoques o formas recomendadas para hacer esto? ¿Cuáles son los pros o los contras de ese método?