- 
Устранение дублирования кода при выполнении запроса к БДИсходный код Как избавиться от дублирования кода Поскольку условие if (!$ncat) влияет только на вид запроса к БД, но не влияет на обработку результатов запроса, второе можно «вынести за скобки». Кроме дублирования в этом фрагменте содержится два знания: как сформировать запрос и как обработать результаты запроса. В идеале тут следует применить рефакторинг «извлечение функции». Я бы убрал… 
- 
Устранение дублирования кода при формировании однотипных whereИсходный код Как можно отрефакторить исходный код В этой функции много лишнего: дублируется код формирования where, присваиваются ненужные перенные, в дублируется значение типа. Также у параметра функции слишком широкий смысл: он назван $filter, хотя он используется как значение типа. Теория Принцип единственной реализации 
- 
Пример рефакторинга «извлечение функции» при подсчёте количества семёрокИсходный код Как улучшить исходный код Форматирование кода Мне явно не хватает пробелов для удобного чтения кода, особенно отступов — с трудом просматривается структура кода. Разделение ответственностей (разделение знаний) После форматирования вижу, что алгоритм функции состоит из двух крупных блоков: разбора входной строки, в процессе которого строка превращается в массив, а затем поиск чего-то в… 
- 
Пример рефакторинга «извлечение функции» при вычислении кодаИсходный код Нарушение принципа единственного знания Этот фрагмент кода знает о двух вещах: какой числовой код соответствует каждому символу, и каким способом применяется числовой код. Полученим числового кода должен заниматься отдельный метод, который будет знать только об этом и ни о чём другом. Извлечение метода для вычисления числового кода Теперь можно дополнительно укоротить функцию GetLetterCode на основе… 
- 
Пример рефакторинга «извлечение метода» при вычислении ширины колонокИсходный код Что не так в исходном коде Отличный пример ужасного форматирования кода. Странные индексы массива -1 и -2. Короткие названия переменных w, A, var, которые ничего не сообщают об их предназначении. Магический литерал 5, смысл которого неизвестен. Сомнительная необходимость в двух одинаковых циклах. Смешаны две разных ответственности (два разных знания): вычисление ширины элемента и присвоение новой ширины всем элементам. Разные ответственности… 
- 
Дублирование реализации при выводе «хлебных крошек»Исходный код Что не так в исходном коде Здесь легко видеть дублирование реализации: зачем-то много раз повторяется вывод одних и тех же строк — это ни к чему. Также не очень понятна логика, когда проверяется наличие переменной, но после проверки она сама не используется (внутри ветки if(isset($title5)) не упоминается переменная $title5). Подозреваю, что в этой неиспользуемой переменной содержится заголовок… 
- 
Пример рефакторинга «извлечение метода» при поиске и выводе типа пакетаИсходный код Какой рефакторинг применить к исходному коду В этом цикле смешаны две ответственности: найти подходящий элемент и предпринять соответствующие действия при успешном поиске. Рекомендую рефакторинг «извлечение метода», извлечённый метод будет искать пакет с именем str. Для обхода списка пакетов применён цикл while, тогда как по смыслу больше подходит for. Стоит избавиться от избыточной переменной bFound. Для получения указателя… 
- 
Рефакторинг возврата true и false из ветвленияИсходный код Что не так в исходном коде Всегда нужно помнить, что логические операции сравнения уже сами по себе дают результат в виде true или false. Поэтому не следует устраивать ветвление только для того, чтобы явно указать, что результатом будет true или false — нужно использовать само логическое выражение без ветвления. Примеры рефакторинга исходного кода Чуть-чуть поменяв проверку distKey и убрав ненужное ветвление, получаем:… 
- 
Рефакторинг «извлечение метода» для устранения дублирования кодаИсходный код Анализ недостатков исходного кода Первое, что сразу бросается в глаза — многократное дублирование реализации создания элемента XItem и сопутствующего прописывания неких значений. Вижу, что тут есть две сущности: Label и Value, сильно связанные между собой, при этом хранящиеся в двух разных массивах. При наличии такой тесной связи есть смысл эту связь выразить в явном виде путём… 
- 
Рефакторинг длинного оператора switch с символами латинского алфавитаИсходный код Что не так в этом коде Здесь проигнорированы сразу несколько типовых подходов. После оператора return нет смысла добавлять оператор break — после первого сразу произойдёт выход из функции, соответственно, проход по операторам case тоже прервётся: Нет смысла ставить return после каждого case: несколько подряд case могут сопровождаться одним на всех действием, именно поэтому обычно case работает в паре с break. Обычно при выяснении принадлежности символа к некоему…