У нашому додатку ми створюємо файли Xml з атрибутом, який має значення Guid. Це значення необхідно узгоджувати між оновленнями файлів. Тож навіть якщо все інше у файлі зміниться, орієнтирне значення для атрибута має залишатися незмінним.
Одним із очевидних рішень було створення статичного словника з назвою файлу та Посібниками, які будуть використовуватись для них. Тоді, коли ми генеруємо файл, ми шукаємо словник на ім'я файлу та використовуємо відповідне керівництво. Але це неможливо, оскільки ми можемо масштабувати до 100-ти файлів і не хочемо підтримувати великий список посібників.
Таким чином, інший підхід полягав у тому, щоб зробити Guid таким же на основі шляху файлу. Оскільки наші шляхи до файлів і структура каталогу додатків унікальні, Посібник повинен бути унікальним для цього шляху. Отже, кожного разу, коли ми запускаємо оновлення, файл отримує те саме керівництво на основі свого шляху. Я знайшов один класний спосіб створити такі « Детерміновані посібники » (спасибі Елтон Стоунмен). Це в основному так:
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;
}
Таким чином, задавши рядок, Посібник завжди буде однаковим.
Чи є якісь інші підходи чи рекомендовані способи цього? Які плюси чи мінуси цього методу?