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
- Host: GitHub
- URL: https://github.com/howprogrammingworks/refactoring
- Owner: HowProgrammingWorks
- License: mit
- Created: 2019-11-02T20:02:43.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-07-25T17:44:55.000Z (over 2 years ago)
- Last Synced: 2025-05-07T18:55:53.061Z (10 months ago)
- Language: JavaScript
- Size: 12.7 KB
- Stars: 4
- Watchers: 6
- Forks: 9
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## Refactoring
[](https://www.youtube.com/watch?v=z73wmpdweQ4)
* Рефакторинг - исправление кода без изменения его внешнего поведения
Когда проводим рефакторинг:
- Когда код написан и он без ошибок
- Когда написаны тесты и они проходят
- Когда нужно сохранить знания о предметной области
- Когда программных компонент часто требует изменений
Когда не проводим:
- Без тестов или со сломанными тестами
- Когад нужно разработать новую функциональность
- Когда нужно изменить поведение уже имеющейся функциональности
- Когда лучше переписать с нуля
Цели:
- Улучшение характеристик кода
- понимаемость человеком
- удовлетворение новых конвенций
- изменяемость (скорость внесения изменений)
- гибкость (возможность интегрировать или перекомпоновать внутри)
- использование новых возможностей языка
- Улучшение характеристик исполнения
- скорость работы алгоритмов
- потребление памяти
- уход от блокирующих операций
Важные аспекты:
- Определяем границы программного компонента для рефакторинга
- Сначала изучаем код и находим все типовые места, которые хотим менять
- Меняем небольшими шагами
- Не откладываем на потом
Техники:
- Переименование
- Избавление от дублирующих фрагментов
- Разделение функций и методов на несколько
- Объединение функций и методов
- Выделение переменных из выражений
- Удаление переменных и объединение выражений
- Разделение классов на несколько
- Объединение классов в один
- Замена внутренних структур данных
- Замена внутренних алгоритмов
- Бросить исключение вместо возврата ошибки
- Вернуть ошибку вместо исключения
- Перемещение кода в иерархии наследования вверх и вниз
- Замена наследования делегированием
- Замена делегирования наследованием