11 October 2008

Невеличкий Code Smell – зменшення унікальності

Сьогодні (і так в суботу), в реалізації кешу нашого додатку знайшов такий приклад коду.


string hashKey = string.Format("{0}_{1}",
        String.IsNullOrEmpty(customerId) ? string.Empty : customerId.GetHashCode().ToString(),
        String.IsNullOrEmpty(orderId) ? string.Empty : orderId.GetHashCode().ToString());

Обидва ідентифікатори це GUID в форматі рядка.

А ось невеличкий код який перевірить такий підхід.


IDictionary cache = new Dictionary();
for (int i = 0; i
{
    Guid newId = Guid.NewGuid();
    int hashCode = newId.ToString().GetHashCode();
    if (cache.ContainsKey(hashCode))
    {
        Console.WriteLine("HashCode: {0}; First GUID: {1}; Second GUID: {2}",
            hashCode, cache[hashCode], newId);
    }
    else
    {
        cache.Add(hashCode, newId);
    }
}

і перші три результати цього кода


HashCode: 140496230; First GUID: d45781e0-62e6-4793-94e706cb3d2ca14a; Second GUID: ffd2b182-a93d-49d5-853e-ca56e5de6fd0
HashCode: 1297286347; First GUID: 53d0efc3-393d-4699-89e5fb10e3bf1220; Second GUID: 09bfe993-104c-48d6-9ce2-ab76a9483e89
HashCode: -1224017075; First GUID: 92ecbaf5-73e5-4f6f-bc4991f0c29b0bf0; SecondGUID: 8c36cfc8-f655-43fa-a2ed-a8584614888b

Цікаво коли ця помилка виявиться на продакшені?

Помічено як: ,
 

Коментарі

Немає коментарів
Анонімні коментарі деактивовані. Увійдіть або Зареєструйтесь щоб мати доступ до ресурсів Спільноти.

About Mike Chaliy

Вчу українську, багато працюю. Цікавлюсь моделюванням небезпек. Більшість часу витрачаю на .Net.