1. Java / Говнокод #17251

    +74

    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
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    configRequestTasks = new ConfigRequestRepeatingTask[]{
                    new ConfigRequestRepeatingTask<ApplicationStateModel.ApplicationState>(this) {
                        @Override
                        protected BaseConfigRequest<ApplicationStateModel.ApplicationState> createRequest() {
                            return new ApplicationStateRequest();
                        }
    
                        @Override
                        public ObjectSetting<ApplicationStateModel.ApplicationState> getConfigSetting() {
                            return Config.ApplicationState;
                        }
                    },
                    new ConfigRequestRepeatingTask<MessagesConfigurationModel.MessagesConfiguration>(this) {
                        @Override
                        protected BaseConfigRequest<MessagesConfigurationModel.MessagesConfiguration> createRequest() {
                            return new MessagesConfigurationRequest();
                        }
    
                        @Override
                        public ObjectSetting<MessagesConfigurationModel.MessagesConfiguration> getConfigSetting() {
                            return Config.MessagesConfiguration;
                        }
                    },
                    new ConfigRequestRepeatingTask<HandsetConfigurationModel.FeatureConfiguration>(this) {
                        @Override
                        protected BaseConfigRequest<HandsetConfigurationModel.FeatureConfiguration> createRequest() {
                            return new FeatureConfigurationRequest();
                        }
    
                        @Override
                        public ObjectSetting<HandsetConfigurationModel.FeatureConfiguration> getConfigSetting() {
                            return Config.FeatureConfiguration;
                        }
                    },
                    new ConfigRequestRepeatingTask<FeaturesDetailsModel.FeaturesDetails>(this) {
                        @Override
                        protected BaseConfigRequest<FeaturesDetailsModel.FeaturesDetails> createRequest() {
                            return new FeaturesDetailsRequest();
                        }
    
                        @Override
                        public ObjectSetting<FeaturesDetailsModel.FeaturesDetails> getConfigSetting() {
                            return Config.FeaturesDetails;
                        }
                    },
                    new ConfigRequestRepeatingTask<GeoFenceConfigurationModel.GeoFenceConfiguration>(this) {
                        @Override
                        protected BaseConfigRequest<GeoFenceConfigurationModel.GeoFenceConfiguration> createRequest() {
                            return new GeoFenceConfigurationRequest();
                        }
    
                        @Override
                        public ObjectSetting<GeoFenceConfigurationModel.GeoFenceConfiguration> getConfigSetting() {
                            return Config.GeoFenceConfiguration;
                        }
                    },
     ...

    Вот так мы создаем "очередь" запросов. И это только треть.

    Запостил: TeTroTro, 04 Декабря 2014

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

    • Чешут анонимными классами язвы от отсутствия лямбд. В кровавое месиво уже расчесали.

      Вынесите хотя бы в XML через Spring: все будет читабельнее
      Ответить
      • > в XML через Spring
        Акститесь

        > язвы от отсутствия лямбд
        Кмк, тут проблема скорее в "гибкой рахитектуре"(tm), которую так любят ваять на ровном месте типичные жаболюбы.
        Ответить
        • >>Акститесь
          Да, XML это БОЛЬНОСЛОЖНОИНТЕРПРАЙЗНЕНУЖНО, и пофиг что IDE его прекрасно поддерживают. IDE это тоже БОЛЬНОСЛОЖНОИНТЕРПРАЙЗНЕНУЖНО. Писать нужно в блокноте и многобуквенно.

          >>которую так любят ваять на ровном месте типичные жаболюбы
          Да, фабрика стратегий которую видимо пытался реализовать автор тоже БОЛЬНОСЛОЖНОИНТЕРПРАЙЗНЕНУЖНО. Нужно в сорока местах написать одинаковый "иф"
          Ответить
          • ВСЕПРОБЛЕМЫРЕШАЮТСЯИДЕИКСЕМЕЛЕМСАХАРОМЛЯМБДАМИ
            Ответить
            • К сожалению на свете живет огромное количество программистов, не осиливших разнообразный сахар, фреймворки, паттерны итд. И эти неосиляторы плодят бойлерплейт и говнокод рассказывая направо и налево что сахар, паттерны, фреймворки и прочий интерпрайз это "ваять на ровном"
              Ответить
              • > не осиливших разнообразный сахар, фреймворки, паттерны итд.
                К сожалению на свете живет огромное количество программистов, не осиливших три основополагающих принципа разработки ПО:
                DRY, KISS, YAGNI.
                Ответить
              • К счастью, на свете живёт небольшое количество программистов, осиливших разнообразный сахар, фреймворки, паттерны и понявших, что в большинстве случаев можно включить мозг и обойтись простым и понятным кодом, не требующим навороченных инструментов анализа, и усложнять всё по мере необходимости.
                Ответить
                • > навороченных инструментов анализа
                  >лямбды
                  Ясно. Давно болеете?
                  Ответить
      • >Чешут анонимными классами язвы от отсутствия лямбд.
        Щито?
        Так пишут не от отсутствия лямбд, а от отсутствия мозга. И неумения основ процедурного программирования.
        Пишем метод (ОДИН РАЗ!)
        static <CONF extends Configuration>
        create<CONF>(SomeShit self, final BaseConfigRequest<CONF> baseConf,ObjectSetting<CONF> config)
        {
        return new ConfigRequestRepeatingTask<T>(self){
                            @Override
                            protected BaseConfigRequest<CONF> createRequest() {
                                return baseConf;
                            }
        
                            @Override
                            public ObjectSetting<CONF> getConfigSetting() {
                                return config;
                            }
                        };
        
        configRequestTasks = { //тут тип не нужен java сама выведет
              create(new ApplicationStateRequest(), Config.ApplicationState)
              ,create(new MessagesConfigurationRequest(),Config.MessagesConfiguration)
              ,create(new FeatureConfigurationRequest(),Config.FeatureConfiguration)
              ,create(new FeaturesDetailsRequest(),Config.FeaturesDetails)
              ,create( new GeoFenceConfigurationRequest(),Config.GeoFenceConfiguration)
        };

        Ваша проблема в том что, есть молоток — лямбды, и всё вокруг стаёт казаться гвоздями. Хотя мне непонятно как тут вообще можно их применить с пользой.
        Ответить
        • Ваша проблема в том, что как только в методе "createRequest()" нужно будет сделать что-то кроме инстанциирования класса --- Ваш код пойдет по пизде.
          Ответить
          • >нужно будет сделать что-то кроме инстанциирования класса --- Ваш код пойдет по пизде.
            Не пойдёт. Это "что-то" можно сделать и вне метода, и передать результат в create параметром.
            Не вижу проблемы.
            Ответить
            • >>Это можно сделать и вне этого метода, и передать результат параметром.
              И похерить всю фабрику стратегий и породить спагетти и говнокод, ок
              Ответить
              • Зато как гордо звучит: "создать фабрику стратегий", "лямбды", "xml" а посмотришь в код, а там тонны такого вот поноса.

                Ну какие спагетти? Какие ifы? Что вы такое интересное рассказываете?
                Ответить
                • >>Ну какие спагетти? Какие ifы? Что вы такое интересное рассказываете?

                  http://sourcemaking.com/refactoring/replace-conditional-with-polymorphism
                  Ответить
      • грусть в том, что это андроид, а там от спринга есть только RestTemplate.
        Ответить
      • Жавабляди соснули. Сейчас пи прибежит с бугуртом.
        Ответить
    • Но надо автору отдать должное: задумка оригинальная. Еще чуть-чуть и получился бы каноничный обозреватель.
      Ответить
      • > оборзеватель
        Возможно вы имели в виду наблюдателя аля observer?
        Ответить
        • Хотя это вроде бы не похоже на обсервер...
          Ответить
          • Блин, посетитель, не обозреватель :) Ну тут же смысл в том, чтобы создать Х объектов с методом передающих что-то похожее одному и тому же посетителю, типа:
            class SomeTask0 extends ConfigRequestRepeatingTask {
                @Override
                public void accept(Visitor visitor) {
                     visitor.visit(Config.FeatureConfiguration);
                }
            }

            и т.д.
            Ответить
    • язва тут еще и в генериках
      Ответить

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