1. C# / Говнокод #4881

    +121

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    private static long generateUniqueSetID(DataContext context)
            {
                long id;
                do
                {
                    id = BitConverter.ToInt64(Guid.NewGuid().ToByteArray(), 0) - DateTime.UtcNow.Ticks;
                } while (s_sets.Contains(id));
    
                if (!context.Sets.Where(s => s.SetID == id).Any())
                {
                    s_sets.Add(id);
                    return id;
                }
    
                return generateUniqueSetID(context);
            }

    это как можно хоть с трудом и догадаться генерация уникального Id для вставки в таблицу. Таблицу чел делал сам и создавать ключик как int его никто не заставлял.

    Запостил: eval_2009, 09 Декабря 2010

    Комментарии (3) RSS

    • может у него БД на файлах ? xD
      Ответить
    • за гуиды в качестве синтетического ключа анально не карают, кстати
      правда, обезьянка сама себя перехитрила...
      Ответить
      • если бы он сделал на guid то претензий бы было гораздо меньше. Но ведь он генерит гуид а затем конвертирует его в int и при этом еще вычитает тики (не зная что guid генерится с учетом времени), потом он проверяет это по циклу в локальном хэше а на сладкое лезет в базу и проверяет там снова - и если есть то рекурсивно вызывает ту же функцию хотя у него уже есть готовый цикл. Если уж не доверяешь уникальности - то такие проверки не помогут, так как в базу ключ пишется позже - когда поезд ушел и уже может другой юзер туда же записать. А если надеешься на нее то на кой это громоздить. Короче, говно код.
        Ответить

    Добавить комментарий