Прийоми рефакторингу
![](/images/refactoring/content/catalog/composing-methods.png?id=953854e802753495812cb9b2686765f7)
Складання методів
Значна частина рефакторинга присвячується правильному складанню методів. У більшості випадків, коренем усіх зол є занадто довгі методи. Хитросплетіння коду всередині такого методу приховують логіку виконання і роблять метод вкрай складним для розуміння, а значить і для змін. Рефакторинги цієї групи покликані зменшити складність всередині методу, прибрати дублювання коду і полегшити подальшу роботу з ним.
![](/images/refactoring/content/catalog/moving-features-between-objects.png?id=8ba49e26381112792e32172edf220524)
Переміщення функцій між об'єктами
Якщо ви розмістили функціональність по класах не найвдалішим чином - це ще не привід впадати у відчай.
Рефакторинги цієї групи показують як безпечно переміщати функціональність з одних класів в інші, створювати нові класи, а також приховувати деталі реалізації з публічного доступу.
![](/images/refactoring/content/catalog/organizing-data.png?id=0be19b5980545dccb976d377ec731d30)
Організація даних
Рефакторинги цієї групи покликані полегшити роботу з даними, замінивши роботу з примітивними типами багатими функціональністю класами.
Крім того, важливим моментом є зменшення зв'язаність між класами, що покращує переносимість класів і шанси їх повторного використання.
- Change Value to Reference
- Change Reference to Value
- Duplicate Observed Data
- Self Encapsulate Field
- Replace Data Value with Object
- Replace Array with Object
![](/images/refactoring/content/catalog/simplifying-conditional-expressions.png?id=a551572d527946cd03b647098b67776d)
Спрощення умовних виразів
Логіка умовного виконання має тенденцію ставати складною, тому ряд рефакторингів спрямований на те, щоб спростити її.
![](/images/refactoring/content/catalog/simplifying-method-calls.png?id=0af0ac74a5d0d7f8ac33a58b4a479ee6)
Спрощення викликів методів
Ці рефакторинги роблять виклики методів простіше і ясніше для розуміння. Це, в свою чергу, спрощує інтерфейси взаємодії між класами.
![](/images/refactoring/content/catalog/dealing-with-generalization.png?id=56357b115153175b2eb40563d936087c)
Задачі узагальнення об'єктів
Узагальнення породжує власну групу рефакторингів, в основному пов'язаних з переміщенням функціональності по ієрархії успадкування класів, створення нових класів та інтерфейсів, а також заміни успадкування делегуванням і навпаки.