Каталог рефакторинга

Запахи кода

– Что? Как может пахнуть код?

– Да, пахнуть определенно не может... а вот пованивать — запросто.

Раздувальщики

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

Нарушители объектного дизайна

Все эти запахи являют собой неполное или неправильное использование возможностей объектно-ориентированного программирования.

Утяжелители изменений

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

Замусориватели

Замусориватели являют собой что-то бесполезное и лишнее, от чего можно было бы избавиться, сделав код чище, эффективней и проще для понимания.

Опутыватели связями

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

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

Составление методов

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

Перемещение функций между объектами

Если вы разместили функциональность по классам не самым удачным образом — это еще не повод отчаиваться. Рефакторинги этой группы показывают как безопасно перемещать функциональность из одних классов в другие, создавать новые классы, а также скрывать детали реализации из публичного доступа.

Решение задач обобщения

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