-
Пример рефакторинга «извлечение метода» для кода поиска и группировки подходящих товаров
Исходный код Что не так в исходном коде В цикле выполняется банальный поиск объектов по определённому признаку, но сам признак не до конца ясен. Понятно, что отбираются объекты, в которых количество совпадает с количеством в контрольном объекте того же массива, но нет указаний на то, чем является этот контрольный объект. Несмотря на то, что кусок…
-
Пример обработки ошибок с помощью оператора goto
Исходный код Что не так в исходном коде Исключения уже изобрели, а применение оператора goto уголовно наказуемо (шутка). Про исключения не шутка.
-
Снова к сравнению с true для возврата true
Исходный код Как стоит отрефакторить исходный код
-
Пример рефакторинга лесенки операторов IF в коде подготовки и выполнения запроса
Исходный код Как можно отрефакторить исходный код В общем случае я не люблю операторы выхода внутри тела функции, но тут как раз тот случай, когда они подходят лучше всего (думаю, как раз для таких случаев их и придумали). Применить их позволяет то обстоятельство, что код метода максимально чистый: он не содержит никаких других знаний, кроме…
-
Пример применения рефакторингов «извлечение класса», «перемещение метода», «излечение метода»
Исходный код Как можно отрефакторить исходный код Полноценно улучшить этот код можно лишь хорошо зная, что находится в обрабатываемом массиве, но кое-что можно сделать и вслепую. На помощь опять приходит рефакторинг «извлечение метода». Но начну я с извлечения класса и перемещения метода. Два вызова методов FindObject и InsertObject издают явственный запах завистливых методов. Чтобы его устранить, нужно сделать переменную theList экземпляром…
-
Пример рефакторинга «извлечение функции» методом составления плана
Исходный код Что не так в этом коде И снова здесь можно видеть массу не связанных между собой вещей: проверка необходимости действия, кеширование, рендеринг контента, подготовка запроса и т.п. Часть из них связана тем, что выход одной вещи является входом для другой, а в остальном вообще никак не связаны между собой — поэтому неясна причина,…
-
Пример рефакторинга «извлечение метода» для кода выполнения SQL-запроса
Исходный код Что не так в исходном коде Этот метод довольно длинный, одно это уже настораживает. В самом начале метода я вижу подключение к базе данных, а потом какие-то пока неясные манипуляции со строками — это второй звоночек. Зачем подключаться к базе данных, если ты ещё не собираешься отправлять запрос? Беглый осмотр оставшегося кода показывает,…
-
Пример неудачного решения для передачи данных из скрипта PHP в JavaScript
Исходный код Что не так в исходном коде Неумение пользоваться штатными средствами порождает странные решения. Большинство задач решаются просто, нужно только узнать, как именно. Видимо, должна быть какая-то чуйка, чтобы понимать: насколько твоё решение вписывается в рамки общепринятых приёмов. Просто помни, что если ты работаешь с инструментом старше 20 лет, и не занимаешься разработкой ядерного…
-
Пример рефакторинга жёстко обфусцированного кода для вычисления непонятно чего
Исходный код Что не так в исходном коде Вот замечательный пример того, насколько всё может быть непонятно даже в коротком простом коде. Возможно даже, этот код участвовал в каком-нибудь конкрусе непонятного кода, поэтому специально был написан настолько непонятным. Печально то, что мы часто пишем подобные вещи на автомате и не замечаем этого. А страдают от…
-
Пример рефакторинга «извлечение метода» в коде контроллера избранных сайтов
Исходный код Что не так в исходном коде Архитектура контроллера Легко видеть, что это код контроллера для отрабатки простейших CRUD-запросов. Структурно все четыре запроса оформлены в виде единого фрагмента кода. При этом каждая из трёх операций по изменению данных заканчивается отображением этих данных на веб-странице. В вебе стандартным является подход, когда добавление, удаление, изменение и…