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

    +131

    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
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    private static bool state;
    
    public static bool InWork
    {
        get
        {
            return state;
        } 
        internal set
        {
            switch (value)
            {
                case true:
                    {
                        try
                        {
                            // попытка запуска сервиса
                            ...
                        }
                        catch (Exception ex)
                        {
                            throw;
                        }
                    }
                    break;
                case false:
                    {
                        if (!state) return;
                        // попытка остановить сервис
                        ...
                    } 
                    break;
            }
            state = value;
        }
    }
    
    public static void Start(...)
    {
        ...
        InWork = true;
    }
    
    public static void Stop()
    {
        ...
        InWork = false;
    }

    Интересный ход, правда?

    Запостил: ddv_demon, 01 Декабря 2011

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

    • Подозрительные места конечно есть, но лично я не могу понять, что тут такого ужастного в этом коде... поясните?
      Ответить
      • Понимаю конечно, что лучше запуск/остановку сервиса делать в методах, а в св-во InWork просто ложить текущий статус, например

        public static bool InWork
        {
        get { return this.state; }
        internal set { this.state = value; }
        }

        public static void Start(...)
        {
        if(!this.InWork)
        {
        ...
        this.InWork = true;
        }
        }

        public static void Stop()
        {
        if(this.InWork)
        {
        ...
        this.InWork = false;
        }
        }

        Но и такой вариант имеет право на существование.
        Ответить
        • Туплю, видимо закусывать надо... switch-true-false
          Ответить
    • Функционально всё OK. Всё компилится и работает, но вот для меня это был чужой код и чтобы найти процедуры, в которых на самом деле выполняется запуск сервиса мне потребовалось минут 5, потому что код содержал много хлама.

      Кстати, доступ извне к функциям остановки сервиса выглядел так: Engine.InWork = false;
      Это при том, что также открыт метод Stop();.
      А просто присвоение InWork=false оказывается запускает сложный код, что не очевидно и, как мне кажется, соотносится с названием сайта.
      Ответить
      • Видимо только начал свойствами пользоваться. Вот и получается. Вот, например, почему именно internal ?
        Ответить
        • наверное потому, что устанавливать значение можно только из текущей сборки. internal для этого и предназначен.
          Капитан Очевидность.
          Ответить
    • Я не си-шарпщик, но вот это мне кажется странным:

      catch (Exception ex)
                          {
                              throw;
                          }

      "Проброс"?
      Ответить
    • Сахарок. Неявные сеттер-методы.
      Итог: ШАРПОПРОБЛЕМЫ
      Ответить
      • Скоро в C# сделают ключевыми все английские слова, известные индусам
        Ответить
      • шарпопроблемы? я вас умоляю.

        я видел как в одном C++ миддлваре народ парсинг сообщения вешал на дереференс поинтера на сообщение. кучи хлама с классами прокладками по всему коду разбросаные - для каждого типа сообщения - только для того что бы в паре месте гордо одним невинно-выглядещим присвоением неявно распарсить это сообщение. (и потом долго трахатся с доставание кода ошибки если не распарсилось.) (одно из объяснение мне давали что делать через полиморфизм не захотели потому что виртуальные методы вызываются медленее.)

        в крестах перегрузкой операторов быдлокодеры через эти тернии давно уже многополосные дороги протоптали.
        Ответить
        • >вешал на дереференс поинтера на сообщение
          Какой ужас.

          >в крестах перегрузкой операторов быдлокодеры через эти тернии давно уже многополосные дороги протоптали.
          Это да. Просто сейчас шарп начал быстро обрастать не особо нужными языковыми конструкциями и скоро смело сможет поспорить с плюсами.
          Ответить
      • показать все, что скрытопросто уйди
        Ответить
    • Это я туплю, или 34 строка сработает вне зависимости от успеха операции?
      Ответить
      • там же throw
        Ответить
        • А если было true, решили поставить false, но сервис не остановился?
          Ответить
          • там код не приведён, но слово "попытка" навевает мысли об обработке исключений
            Ответить
            • А если он запущен, и снова присвоить true или в цикле присваивать true? Сколько экземпляров сервиса стартанет? А сколько потом остановитть можно будет?
              Ответить
    • Сколько пустоты вокруг единственной содержательной части, скрывшейся в комментарии "запуск/остановка"
      Ответить
    • присутствует 2 глупости: switch для булевого значения и перехват c повторной генерацией ошибки. в целом, на говнокод не тянет
      Ответить
    • показать все, что скрытоvanished
      Ответить

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