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

    +74.2

    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
    package efi.base.business.metadata;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class MetaModel {
        private String name = null;
        private List attributeNames = new ArrayList();
        private List attributeValues = new ArrayList();
    
        public MetaModel(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void addAttribute(Attribute attribute) {
            attributeNames.add(attribute.getName());
            attributeValues.add(attribute);
        }
    
        public Attribute getAttribute(String attrubuteName) {
            return (Attribute) attributeValues.get(attributeNames.indexOf(attrubuteName));
        }
    
        public Iterator attributesIterator() {
            return attributeNames.iterator();
        }
    }

    Человек, писавший этот говнокласс, видимо и не подозревал, что в JDK кроме листов есть еще и Map-ы :-)

    Запостил: Andronix, 14 Апреля 2010

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

    • C++? ЕЕЕЕеее!!!!
      Ответить
    • 1. сортировка (есть итератор)
      2. повторяющиеся ключи (нет проверок на повторы)
      следовательно - мапа не выход (даже сортед)
      3. нет генериков - вероятно древний ждк
      итого: не говнокод а "решение для данного конкретного случаю"
      Ответить
      • Говнокод, еще какой говнокод!
        1) Сортировкой здесь и не пахнет, а если вы имели ввиду упорядоченность данных, то LinkedHashMap эту проблему замечательно решает
        2) Повторяющиеся ключи можно было оформлять в виде Map<String, List<Attribute>> (учитывая, что это писалось давно, т.к. сейчас лучше использовать Multimap из Google Collections для таких целей)
        3) Отсутсвие generic-ов говорит о том, что это leacy-код, который писался еще под 1.4, а сейчас уже работает на 1.6, но просто не у кого не доходили руки его параметризировать.
        А самый главный недостаток в этом коде - это bad performance, потому как получение элемента из HashMap происходит по hashCod-у, и это в разы быстрее, чем линейный перебор элементов по indexOf.
        Ответить
      • 2. повторяющиеся ключи (нет проверок на повторы) - attributeNames.indexOf(attrubuteName) вернет позицию первого ключа

        говнокод говнокодом, да еще и тупо грамматические ошибки
        Ответить
        • Грамматические ошибки - это норма для нашего проекта :-) У нас есть пакет типа xxx.xxx.webserices, в котором лежит куча всякого стаффа, связанного с веб-сервисами, но переименовать его уже нельзя, т.к. на нем завязано много стороннего кода.
          Ответить

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