Рефакторинг небольшого скрипта Битрикса

До и после рефакторинга, реальный проект, сделано по-быстрому.

Суть изменений

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);

Но зачем так делать, если можно все поделить на методы, в которых временные переменные «снаружи» не видны? Знание и использование возможностей языка - легко избавляет от такой и других ошибок.

Орфография

Просто неприятно читать. Исправляем

Отсутствует элемид
Проверяем, иммет ли юзер компанию
Печать/экспорт