Каталог рефакторингу
Запахи коду
— Що? Як взагалі код може пахнути?
— Так, пахнути дійсно не може... а от трохи смердіти — запросто.

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

Порушники об'єктного дизайну
Всі ці запахи являють собою неповне або неправильне використання можливостей об'єктно-орієнтованого програмування.

Ускладнювачі змін
Ці запахи призводять до того, що при необхідності щось поміняти в одному місці програми, вам доводиться вносити безліч змін в інших місцях. Це серйозно ускладнює і здорожує розвиток програми.

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

Заплутувальники зв'язками
Всі запахи з цієї групи призводять до надлишкової зв'язаності між класами, або показують, що буває якщо тісна зв'язаність заміщується постійним делегуванням.
Прийоми рефакторингу

Складання методів
Значна частина рефакторинга присвячується правильному складанню методів. У більшості випадків, коренем усіх зол є занадто довгі методи. Хитросплетіння коду всередині такого методу, ховають логіку виконання і роблять метод вкрай складним для розуміння, а значить і для змін. Рефакторинги цієї групи покликані зменшити складність всередині методу, прибрати дублювання коду і полегшити подальшу роботу з ним.

Переміщення функцій між об'єктами
Якщо ви розмістили функціональність по класах не найвдалішим чином - це ще не привід впадати у відчай.
Рефакторинги цієї групи показують як безпечно переміщати функціональність з одних класів в інші, створювати нові класи, а також приховувати деталі реалізації з публічного доступу.

Організація даних
Рефакторинги цієї групи покликані полегшити роботу з даними, замінивши роботу з примітивними типами багатими функціональністю класами.
Крім того, важливим моментом є зменшення зв'язаність між класами, що покращує переносимість класів і шанси їх повторного використання.
- Заміна значення посиланням
- Заміна посилання значенням
- Дублювання видимих даних
- Самоінкапсуляція поля
- Заміна простого поля об'єктом
- Заміна поля-масиву об'єктом

Спрощення умовних виразів
Логіка умовного виконання має тенденцію ставати складною, тому ряд рефакторингів спрямований на те, щоб спростити її.

Спрощення викликів методів
Ці рефакторинги роблять виклики методів простіше і ясніше для розуміння. Це, в свою чергу, спрощує інтерфейси взаємодії між класами.

Задачі узагальнення об'єктів
Узагальнення породжує власну групу рефакторингів, в основному пов'язаних з переміщенням функціональності по ієрархії успадкування класів, створення нових класів та інтерфейсів, а також заміни успадкування делегуванням і навпаки.