Рефакторинг кода

Рефакторинг кода

15 июля 2021

Капитальный ремонт или перепланировку хоть раз в жизни, пожалуй, делал каждый. Трубы и проводка изнашиваются, отделочные материалы и предметы интерьера устаревают, расположение комнат перестает быть удобным. Рефакторинг сравним с капитальным ремонтом и предполагает перепроектирование и исправление кода. Меняется внутренняя структура программы, в то время как поведение остается прежним.

Рефакторинг кода часто требуется, потому что:

  1. первая версия была сделана на скорую руку или «как можно дешевле»;
  2. появилась новая версия компилятора или библиотек;
  3. прошлые программисты могли допускать архитектурные ошибки;
  4. по мере эксплуатации становится понятно, что нужны новые функции.
Восклицательный знак в заштрихованном круге

Низкокачественный код отличается громоздкостью и нечитаемостью, хранением паролей в cookies, сложностью URL, именованием переменных на разных языках.

Рефакторинг исправляет.

01разнородный стиль треугольник круг квадратРазнородный стиль именования переменных, методов, классов.
02дублирование кода два скриптаДублирование кода.
03длинный классДлинные методы и классы.
04перегруженный списокПерегруженный список параметров функций и методов.
05длинные блоки схемаДлинные блоки ветвления.
06магический знакМагические значения.
07непонятная аббревиатураИспользование непонятных аббревиатур.
08жесткое допущениеЖесткое кодирование допущений.
09чрезмерное конфигурированиеЧрезмерное конфигурирование.
10запутанный кодЗапутанный код.
11уровни абстракции круг гептагон треугольникЧрезмерное количество уровней абстракции.
12зависимый классЧрезмерную взаимозависимость классов друг от друга.
13нет проверки перечеркнутый списокОтсутствие проверки входных данных.
14перегруженный классПерегрузку классов и компонентов разнородным функционалом.
15обобщенный кодЧрезмерную обобщенность кода.
16переменные в поляхХранение временных значений в полях.
17классы посредникиКлассы-посредники.
18нет изоляции классаНедостаток изоляции классов.
19неуместное наследованиеНеуместное наследование классов.
20наследование делегированиеНаследование вместо делегирования.
21логика вне классовЛогику вне классов предметной области.
22прямые вызовыПрямые вызовы между далеко расположенными частями системы.
23неиспользуемый кодНеиспользуемый код.
24потребление cpuПотребление центрального процессора на ожидание.
25нет параллельных cpuНекорректное распараллеливание задач или не использование потоков.
26отдельная ветвьОтдельную ветвь кода для частных случаев.
27библиотекаСамописный код вместо использования библиотеки.
28мало комментарийНедостаточное комментирование кода или чрезмерное комментирование очевидных участков.

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