Содержание
Рефакторинг небольшого скрипта Битрикса
До и после рефакторинга, реальный проект, сделано по-быстрому.
Суть изменений
164 строки простыни, где трудно уследить за чем-то.
«До рефакторинга» | «После рефакторинга» |
---|---|
164 строчки кода | 164 строчки кода |
Скрипт - длинная простыня, трудно читать | Легко читать, все разбито на блоки, активно используются исключения как часть логики |
Функции/методы не используются, нет ООП | Есть ООП, методы используются как небольшие участки кода, которые легче понимать и отлаживать, методы скрывают реализацию и не загромождают логику |
Область видимости переменных - весь скрипт. Что делает эта переменная? Используется ли она переменная дальше? Нет ли где-то в середине изменения ее сути (повторное использование имени с другой целью)? | Переменные всегда отражают свою суть, разграничены области видимости |
Модульность
В варианте «до рефакторинга» логика размазана по всему скрипту, чтобы понять общую суть, приходится читать полностью. В варианте «после» сделан один метод run
, который выполняется по шагам, на каждом шаге может выброситься исключение, которое используется как часть логики. Не авторизован пользователь - бросается исключение. Нет необходимых данных в запросе - исключение.
Модульность заключается в дроблении длинной простыни на небольшие методы.
Исключения
До и после:
if(!$USER->IsAuthorized()) { $json->setError("Вы не авторизованы!"); return; }
if(!$this->USER->IsAuthorized()) throw new Exception('Вы не авторизованы!', 1);
Исключения дают возможность писать более элегантный код. И часто получается короче!
Переменные
Переменная $arParams
объявлена на 51 строчке, а используется на 138, что на три экрана ниже!
На нашем кассетнике кончилась пленка - мотаем
В варианте «до» все переменные видны из всех точек скрипта. Особенно мешаются временные переменные. Эта проблема частично решена через
unset($arSelect, $arFilter, $res);
Но зачем так делать, если можно все поделить на методы, в которых временные переменные «снаружи» не видны? Знание и использование возможностей языка - легко избавляет от такой и других ошибок.
Орфография
Просто неприятно читать. Исправляем
Отсутствует элемид Проверяем, иммет ли юзер компанию