Про рефакторинг

· разное

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

Оставь место стоянки чище, чем оно было до твоего прихода.

У многих программистов есть мнение, что рефакторинг это что-то объемное, на что нужно регулярно выделять отдельный большой кусок времени (которого нет, так как с новой неделей уже нужно внедрять новые фичи). В итоге долг растет (как и количество ошибок), ничего не предпринимается и все демотивированы. Хотя, именно регулярные маленькие изменения часто вносят решающий вклад. Что-то вроде ныне модного кайдзен. При выполнении задачи всегда можно сделать чуть больше и добавить коду гибкости.

При этом важно ничего не сломать. Помогает простой алгоритм:

  1. Удостовериться, что функционал работает (написать автотесты);
  2. Произвести мелкие улучшения;
  3. Проверить, что ничего не сломалось.

В идеальном мире перед тем как применять алгоритм выше, следует предпринять меры к тому чтобы бардак не накапливался. Однако никто не мешает начать с малого и сделать код проще без вероятности его сломать. Скорее всего можно:

  1. Переименовать методы и классы в более семантичные;
  2. Уменьшить связность в коде;
  3. Написать комментарии там где их нет, чтобы другим программистам в будущем было проще;
  4. Побить классы на более мелкие по принципу единственной ответственности;
  5. Вынести повторяющийся код в отдельные методы;
  6. Просто описать какой-то модуль или код в документации;
  7. Удалить неиспользуемый код.

Тем кто хочет встать на нелегкий путь борьбы с бардаком полезно полистать такие книги как “Чистый код” Боба Мартина, “Совершенный код” Стива Макконнелла. Если читать много лень, то есть куча ресурсов с описанием таких популярных концепций как DRY, SOLID, GRASP, KISS, YAGNI. Этого вполне хватит на первых порах.