Uygulamamızda, Guid değeri olan bir özniteliğe sahip Xml dosyaları oluşturuyoruz. Bu değerin dosya yükseltmeleri arasında tutarlı olması gerekiyordu. Dolayısıyla, dosyadaki diğer her şey değişse bile, özniteliğin kılavuz değeri aynı kalmalıdır.
Açık bir çözüm, dosya adı ve bunlar için kullanılacak Kılavuzlar ile statik bir sözlük oluşturmaktı. Daha sonra, dosyayı her oluşturduğumuzda, dosya adı için sözlüğe bakar ve ilgili kılavuzu kullanırız. Ancak bu mümkün değil çünkü 100'lerce dosyaya ölçeklenebilir ve büyük bir kılavuz listesi tutmak istemedik.
Bu nedenle başka bir yaklaşım, Kılavuz'u dosyanın yoluna bağlı olarak aynı yapmaktı. Dosya yollarımız ve uygulama dizini yapımız benzersiz olduğundan, Kılavuz bu yol için benzersiz olmalıdır. Dolayısıyla, bir yükseltme çalıştırdığımızda, dosya yoluna bağlı olarak aynı kılavuzu alır. Bu tür ' Belirleyici Kılavuzlar ' oluşturmanın harika bir yolunu buldum (Teşekkürler Elton Stoneman). Temelde şunu yapar:
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;
}
Dolayısıyla bir dizge verildiğinde Kılavuz her zaman aynı olacaktır.
Bunu yapmak için başka yaklaşımlar veya önerilen yollar var mı? Bu yöntemin artıları veya eksileri nelerdir?