Каталог рефакторингу
Запахи коду
— Що? Як взагалі код може пахнути?
— Так, пахнути дійсно не може... а от трохи смердіти — запросто.
Роздувальщики
Раздувальщики представляють код, методи і класи, які роздулися до таких великих розмірів, що з ними стало неможливо ефективно працювати. Всі ці запахи часто не з'являються відразу, а наростають в процесі еволюції програми (особливо коли ніхто не намагається боротися з ними).
Порушники об'єктного дизайну
Усі ці запахи свідчать про неповне або неправильне використання можливостей об'єктно-орієнтованого програмування.
Ускладнювачі змін
Ці запахи призводять до того, що при необхідності щось поміняти в одному місці програми, вам доводиться вносити безліч змін в інших місцях. Це серйозно ускладнює і здорожує розвиток програми.
Забрюднювачі коду
Забрюднювачі коду — це щось зайве, від чого можна було б позбутися, зробивши код простішим для розуміння.
Заплутувальники зв'язками
Всі запахи з цієї групи призводять до надлишкової зв'язаності між класами, або показують, що буває якщо тісна зв'язаність заміщується постійним делегуванням.
Прийоми рефакторингу
Складання методів
Значна частина рефакторинга присвячується правильному складанню методів. У більшості випадків, коренем усіх зол є занадто довгі методи. Хитросплетіння коду всередині такого методу приховують логіку виконання і роблять метод вкрай складним для розуміння, а значить і для змін. Рефакторинги цієї групи покликані зменшити складність всередині методу, прибрати дублювання коду і полегшити подальшу роботу з ним.
Переміщення функцій між об'єктами
Якщо ви розмістили функціональність по класах не найвдалішим чином - це ще не привід впадати у відчай.
Рефакторинги цієї групи показують як безпечно переміщати функціональність з одних класів в інші, створювати нові класи, а також приховувати деталі реалізації з публічного доступу.
Організація даних
Рефакторинги цієї групи покликані полегшити роботу з даними, замінивши роботу з примітивними типами багатими функціональністю класами.
Крім того, важливим моментом є зменшення зв'язаність між класами, що покращує переносимість класів і шанси їх повторного використання.
- Change Value to Reference
- Change Reference to Value
- Duplicate Observed Data
- Self Encapsulate Field
- Replace Data Value with Object
- Replace Array with Object
Спрощення умовних виразів
Логіка умовного виконання має тенденцію ставати складною, тому ряд рефакторингів спрямований на те, щоб спростити її.
Спрощення викликів методів
Ці рефакторинги роблять виклики методів простіше і ясніше для розуміння. Це, в свою чергу, спрощує інтерфейси взаємодії між класами.
Задачі узагальнення об'єктів
Узагальнення породжує власну групу рефакторингів, в основному пов'язаних з переміщенням функціональності по ієрархії успадкування класів, створення нових класів та інтерфейсів, а також заміни успадкування делегуванням і навпаки.