Рубрика: Рефакторинг

  • Исправление алгоритма подсчёта строк в таблице базы данных

    Исходный код Что не так в исходном коде Тут снова ставший уже классическим косяк с подсчётом количества строк в результатах запроса. Через пэхэпэшный count() можно подсчитывать строки, если они уже полностью загружены в память для дальнейшего использования. Если строки в памяти не нужны, а нужно только их количество — следует использовать эскуэльный count(). Подобный недостаток уже можно отнести к…

  • Пример исправления неудачных названий констант

    Исходный код Что не так в исходном коде Лучше всего исходный код характеризуется присказкой «масло масляное». А если говорить серьёзно, то название константы, как и переменной, должно отражать смысл величины, в ней заключённой, её предназначение. Лучше понять принцип для выбора названия переменной позволит понимание разницы между намерением и реализацией. Здесь 255 — это реализация, а название должно…

  • Упрощение булева выражения с помощью поясняющей переменной

    Исходный код Как можно улучшить исходный код По правилам булевой логики выражение можно упростить: arg(0) != ‘node’ or arg(1) != 11. Очень полезно добавить поясняющие переменные в этот код, потому что непосредственно из нынешней записи выражения не понятно, что тут происходит. Теория Рефакторинг «Введение поясняющей переменной»

  • Тотальный рефакторинг короткого кода из трёх строк

    Исходный код Что не так в исходном коде Вопросы к коду Усилия, которые требуются для понимания этого кода несопоставимы с его размерами и значимостью. Так происходит оттого, что в нём ничтожно мало названий, а те, что есть, не рассказывают историю, не указывают на предметную область. Что такое $tf1 и $tf2 — что такое каждый элемент в этих массивах? И…

  • Пример рефакторинга «извлечение функции» и оптимизации алгоритма получения 16-ричного дампа

    Исходный код Очевидно, код представляет собой образец лабораторной работы, так как в реальном проекте должен быть реализован гораздо проще. Мне он интересен исключительно для демонстрации возможных способов рефакторинга. Что не так в исходном коде Обработка данных привязана к месту хранения данных (смешаны знания о хранении числа, которое нужно отобразить, и о собственно алгоритме отображения). Довольно…

  • Пример исправления неудачных названий переменных и метода в коде переключения режимов

    Исходный код Что не так в исходном коде Недавно я уже рефакторил код похожей структуры, поэтому не буду повторять решение один в один. Вместо этого хочу обратить внимание на другой недостаток исходного кода: глядя на него совершенно невозможно понять, о чём идёт речь — в чём смысл одного и второго режима, и что это за кнопки…

  • Пример исправления алгоритма формирования оператора where для sql-запроса

    Исходный код Что не так в исходном коде Здесь сразу несколько проблем различной степени тяжести. Однородная обработка данных выполняется без массивов и циклов, что приводит к ненужным переменным и проверкам. Конкретно здесь цикл здесь ни к чему, так как входные данные раскиданы по разным переменным, а вот массив для выходных данных очень даже пригодится. Смешаны…

  • Пример рефакторинга «перемещение метода» при подготовке списка получателей письма

    Исходный код Что не так в исходном коде Первая проблема в исходном коде: обработка списка получателей привязана к конкретному полю $this->oPostTest->recipients. Решение: обработка списка получателей должна быть оформлена в виде обработки абстрактной строки, без привязки к месту хранения этого списка, то есть к полю $this->oPostTest->recipients. Вторая: исходный код погружается напозволительно глубоко в детали устройства объекта $this->oPostTest, с которым…

  • Пример неудачного извлечения функции при формировании скриншота из видеоролика

    Исходный код Что не так в исходном коде Казалось бы, вот есть отдельная маленькая функция, всё как я люблю. Однако здесь функция не прячет никакого знания, намерение полностью совпадает с реализацией. Сейчас описание функции звучит так: «Чтобы получить картинку из кадра, нужно вызвать метод получения картинки из кадра». Другими словами, здесь метод превращён в функцию…

  • Пример устранения дублирования реализации при рендеринге селектора цвета

    Исходный код Что не так в исходном коде Повторяющиеся строки символов в исходном коде — это тоже дублирование реализации. В данном коде это реализация рендеринга кнопки для выбора цвета на веб-сайте. Как можно улучшить исходный код Когда встречается такая вот повторяющаяся регулярная структура, всегда нужно помнить: решением здесь может быть только цикл. Формирование элементов в…