Trong ứng dụng của chúng tôi, chúng tôi đang tạo các tệp Xml với một thuộc tính có giá trị Guid. Giá trị này cần phải nhất quán giữa các lần nâng cấp tệp. Vì vậy, ngay cả khi mọi thứ khác trong tệp thay đổi, giá trị hướng dẫn cho thuộc tính vẫn được giữ nguyên.
Một giải pháp rõ ràng là tạo một từ điển tĩnh với tên tệp và Guids để sử dụng cho chúng. Sau đó, bất cứ khi nào chúng tôi tạo tệp, chúng tôi tra cứu từ điển cho tên tệp và sử dụng hướng dẫn tương ứng. Nhưng điều này không khả thi vì chúng tôi có thể mở rộng quy mô đến 100 tệp và không muốn duy trì danh sách lớn các tệp.
Vì vậy, một cách tiếp cận khác là làm cho Hướng dẫn giống nhau dựa trên đường dẫn của tệp. Vì đường dẫn tệp và cấu trúc thư mục ứng dụng của chúng tôi là duy nhất, nên Hướng dẫn phải là duy nhất cho đường dẫn đó. Vì vậy, mỗi lần chúng tôi chạy nâng cấp, tệp sẽ nhận được cùng một hướng dẫn dựa trên đường dẫn của nó. Tôi đã tìm thấy một cách tuyệt vời để tạo ra ' Guid xác định ' như vậy (Cảm ơn Elton Stoneman). Về cơ bản nó thực hiện điều này:
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;
}
Vì vậy, với một chuỗi, Hướng dẫn sẽ luôn giống nhau.
Có bất kỳ cách tiếp cận nào khác hoặc các cách được khuyến nghị để làm điều này không? Ưu nhược điểm của phương pháp đó là gì?