An open API service indexing awesome lists of open source software.

https://github.com/howprogrammingworks/refactoring

Refactoring — changing the code without changing its external behavior
https://github.com/howprogrammingworks/refactoring

Last synced: 8 months ago
JSON representation

Refactoring — changing the code without changing its external behavior

Awesome Lists containing this project

README

          

## Refactoring

[![Рефакторинг: причины, цели, техники и процесс](https://img.youtube.com/vi/z73wmpdweQ4/0.jpg)](https://www.youtube.com/watch?v=z73wmpdweQ4)

* Рефакторинг - исправление кода без изменения его внешнего поведения

Когда проводим рефакторинг:
- Когда код написан и он без ошибок
- Когда написаны тесты и они проходят
- Когда нужно сохранить знания о предметной области
- Когда программных компонент часто требует изменений

Когда не проводим:
- Без тестов или со сломанными тестами
- Когад нужно разработать новую функциональность
- Когда нужно изменить поведение уже имеющейся функциональности
- Когда лучше переписать с нуля

Цели:
- Улучшение характеристик кода
- понимаемость человеком
- удовлетворение новых конвенций
- изменяемость (скорость внесения изменений)
- гибкость (возможность интегрировать или перекомпоновать внутри)
- использование новых возможностей языка
- Улучшение характеристик исполнения
- скорость работы алгоритмов
- потребление памяти
- уход от блокирующих операций

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

Техники:
- Переименование
- Избавление от дублирующих фрагментов
- Разделение функций и методов на несколько
- Объединение функций и методов
- Выделение переменных из выражений
- Удаление переменных и объединение выражений
- Разделение классов на несколько
- Объединение классов в один
- Замена внутренних структур данных
- Замена внутренних алгоритмов
- Бросить исключение вместо возврата ошибки
- Вернуть ошибку вместо исключения
- Перемещение кода в иерархии наследования вверх и вниз
- Замена наследования делегированием
- Замена делегирования наследованием