1. ActionScript / Говнокод #6527

    −105

    1. 1
    2. 2
    // 13512 строк
    public class UIComponent extends FlexSprite implements IAutomationObject, IChildList, IConstraintClient, IDeferredInstantiationUIComponent, IFlexDisplayObject, IFlexModule, IInvalidating, ILayoutManagerClient, IPropertyChangeNotifier, IRepeaterClient, IStateClient, IAdvancedStyleClient, IToolTipManagerClient, IUIComponent, IValidatorListener, IVisualElement

    Взято из http://juick.com/yzh44yzh/1338788

    *trollface.jpg*

    Запостил: makc3d, 01 Мая 2011

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

    • обычная практика
      это аспектно-ориентированное программирование
      Ответить
      • Bloatware ориентированное программирование
        Ответить
        • я не про "// 13512 строк", а про множественное наслед... кхм. кхм. а что? я ничего ^_^
          Ответить
      • Кхм? И где же тут аспекты?
        Ответить
    • Я тоже когда первый раз увидел - подумал, что чего-то не понимаю. Через пару лет знакомства ощущение не прошло, но только теперь кажется, что не понимаю не я, а авторы этого шедевра :)
      Ответить
    • я столько новых интерфейсов для себя открыл (о существовании которых даже не подозревал)
      Ответить
    • наверное, самое большое открытие, к которому приходишь на данном сайте:
      если код получается некрасивым, то в этом виноват ты, программист, а не язык и не инструменты

      то есть, например, в данном случае тоже с первого взгляда можно было бы развести руками - мол, ну что поделать, если компонент такой универсальный?
      а выходов всегда много. в данном случае:
      1. хреновое проектирование. Действительно ли нам нужны именно столько и таких интерфейсов?
      2. хреновая реализация. Допустим, все интерфейсы нужны. Но неужто нельзя было их сгруппировать по иерархии, наделать базовых классов с длинным наследованием?
      Ответить
      • Спасибо, КЭП. :)
        Ответить
      • Нет, правда спасибо. :)
        Ответить
      • >сгруппировать по иерархии, наделать базовых классов с длинным наследованием?

        "Умение героически преодолевать трудности, которые создает твой собственный инструмент..."
        Ответить
      • Не, там все было прозаичнее - сначала не знали как сделать, но был кто-то, кто когда-то что-то делал на SWing'e. И вот начали от туда копировать, по-памяти. Потом перестало срастаться. Потом стало срастаться, но не стем чем надо... Сейчас пытаются переписать по-новой, но поезд уже далеко ушел...
        Т.е. интерфейсы накапливались по мере развития проекта. За каждым из них вполне может стоят история недоисправленных багов и недореализованых улучшений. Кроме всего прочего - это не самая современная версия этого класса. И у некоторых интерфейсов там уже начинают циферки появлятся. Типа StyleManager2, LayoutManager2 и т.п.
        Ответить
        • диагноз - отсутствие изначально продуманного проектирования.
          А как обычно: -Нам нужно сделать новую крутую хрень! -Круто, а что это будет за хрень?Как мы ее сделаем? -Ээээ, вот у нас уже есть наша старая крутая хрень, давайте сделаем как там! -Да!
          в результате кашу того, что было, приправили новой приправой, и запутались еще больше, чем с первой хренью.

          А все потому, что, как обычно, не задавали постоянно вопросом "а зачем нам это? действительно ли оно нам надо?"
          Ответить

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