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

Але що станеться через кілька днів чи місяців…? Як ваш код виглядає...?? Це складно? Це важко зрозуміти? Якщо так, то точно ви не приділяли уваги вдосконаленню або реструктуризації свого коду. Можливо, ви написали дублікат коду, не дивлячись на існуючий код, або, можливо, ви написали кілька довших методів/функцій, великих класів, забагато параметрів, неінтуїтивно зрозумілих імен змінних, розміщення коду тощо.
Покращення або оновлення коду без зміни функціональності програмного забезпечення або зовнішньої поведінки програми відоме як рефакторинг коду. Це зменшує технічні витрати та робить код більш ефективним і придатним для обслуговування. Якщо ви не звернете увагу на процес рефакторингу коду раніше, ви заплатите за помилки у своєму коді пізніше. Тому не ігноруйте очищення коду.
У процесі розробки програмного забезпечення різні розробники мають різні стилі написання коду. Вони вносять зміни, обслуговують код, розширюють код і в більшості випадків залишають код без постійного рефакторингу. Неперероблений код має тенденцію до гниль коду: багато плутанини та безладу в коді, наприклад дублювання коду, нездорові залежності між класами чи пакетами, неправильний розподіл обов’язків класів, забагато обов’язків на метод або клас тощо. Щоб уникнути всіх цих проблем, важливий постійний рефакторинг.
Тепер питання… які є методи рефакторингу коду?
Ми обговоримо деякі популярні та поширені методи рефакторингу коду, але перед цим давайте обговоримо кілька коротких порад...
Поради:
- Вам потрібно виконувати рефакторинг коду невеликими кроками. Внесіть невеликі зміни у свою програму, кожна з маленьких змін покращить ваш код і залишить програму в робочому стані.
- Запустіть тест TDD і CI після внесення невеликих змін у процес рефакторингу. Без виконання цих тестів ви створюєте ризик появи помилок.
- Не створюйте жодних нових функцій або функцій під час процесу рефакторингу. Перед додаванням будь-яких оновлень або нових функцій у існуючий код слід змінити код.
- Процес рефакторингу може вплинути на результати тестування, тому було б добре залучити вашу команду з контролю якості та тестування до процесу рефакторингу.
- Ви повинні прийняти, що ви не будете повністю задоволені своїм кодом. Ваш оновлений код найближчим часом застаріє, і вам доведеться оновлювати його знову.
Найпоширеніші методи рефакторингу коду
Існує багато підходів і технік рефакторингу коду. Давайте обговоримо деякі популярні...
1. Червоно-зелений рефакторинг
Red-Green є найпопулярнішим і широко використовуваним методом рефакторингу коду в процесі розробки програмного забезпечення Agile. Ця техніка дотримується підходу до проектування та реалізації, який закладає основу для всіх форм рефакторингу. Розробники беруть на себе ініціативу щодо рефакторингу в циклі розробки, керованому тестуванням, і він виконується в три окружні кроки.

- ЧЕРВОНИЙ: Перший крок починається з написання невдалого червоного тесту. Ви зупиняєтеся і перевіряєте, що потрібно розвивати.
- Зелений: На другому кроці ви пишете досить простий код і отримуєте розробку, яка проходить екологічне тестування.
- Рефактор: На останньому та третьому етапах ви зосереджуєтеся на вдосконаленні та покращенні свого коду, зберігаючи тест зеленим.
Отже, в основному ця техніка складається з двох окремих частин: перша частина передбачає написання коду, який додає нову функцію до вашої системи, а друга частина пов’язана з рефакторингом коду, який виконує цю функцію. Майте на увазі, що ви не повинні робити обидва одночасно під час робочого процесу.
2. Рефакторинг за допомогою абстракції
Ця техніка в основному використовується розробниками, коли є потреба виконати великий обсяг рефакторингу. В основному ми використовуємо цю техніку для зменшення надмірності (дублювання) у нашому коді. Це включає успадкування класів, ієрархію, створення нових класів та інтерфейсів, вилучення, заміну успадкування делегуванням і навпаки.

Підтягування/віджимання Метод є найкращим прикладом цього підходу.
- Метод підтягування: Він об’єднує частини коду в суперклас і допомагає усунути дублювання коду.
- Метод Push-Down: Він бере частину коду з суперкласу та переміщує його вниз на підкласи.
Витягніть тіло конструктора, витягніть підклас, витягніть суперклас, згорніть ієрархію, метод шаблону форми, витягніть інтерфейс, замініть успадкування на делегування, замініть делегування на успадкування, опустіть поле — усе це інші приклади.
По суті, у цій техніці ми створюємо рівень абстракції для тих частин системи, які потребують рефакторингу, і аналога, який зрештою збирається його замінити. Нижче наведено два типові приклади…
амріта рао актор
- Інкапсульований поле: Ми змушуємо код отримати доступ до поля за допомогою методів getter і setter.
- Узагальнений тип: Ми створюємо більш загальні типи, щоб дозволити спільне використання коду, замінити код перевірки типу на стан, замінити умовний на поліморфізм тощо.
3. Композиторський метод
На етапі розробки програми ми часто пишемо довгі методи в нашій програмі. Ці довгі методи роблять ваш код надзвичайно складним для розуміння та змін. У цих випадках переважно використовується метод складання.
У цьому підході ми використовуємо методи оптимізації, щоб зменшити дублювання в нашому коді. Деякі приклади: метод вилучення, вилучення змінної, вбудований Temp, заміна Temp на Query, вбудований метод, розділення тимчасової змінної, видалення призначень для параметрів тощо.
Видобуток: Ми розбиваємо код на менші фрагменти, щоб знайти та вилучити фрагментацію. Після цього ми створюємо окремі методи для цих фрагментів, а потім це замінюється викликом цього нового методу. Екстракція включає клас, інтерфейс і локальні змінні.
В лінію: Цей підхід видаляє кількість непотрібних методів у нашій програмі. Ми знаходимо всі виклики методів, а потім замінюємо їх вмістом методу. Після цього видаляємо метод з нашої програми.
як розіменувати покажчик у c
4. Методи спрощення
У цьому підході використовуються дві методики… давайте обговоримо обидві.
- Спрощення умовних виразів Рефакторинг: Умовний оператор у програмуванні з часом стає все більш логічним і складним. Вам потрібно спростити логіку у вашому коді, щоб зрозуміти всю програму.
Існує так багато способів рефакторингу коду та спрощення логіки. Деякі з них: консолідація умовного виразу та дублювання умовних фрагментів, розкладання умовного виразу, заміна умовного виразу на поліморфізм, видалення прапора керування, заміна вкладеного умовного виразу на захисні речення тощо. - Спрощення методу викликає рефакторинг: У такому підході ми робимо виклики методів простішими та зрозумілішими. Ми працюємо над взаємодією між класами, спрощуємо для них інтерфейси.
Приклади: додавання, видалення та введення нових параметрів, заміна параметра явним методом і викликом методу, параметризація методу, створення окремого запиту від модифікатора, збереження всього об’єкта, видалення методу налаштування тощо.
5. Переміщення об’єктів між об’єктами
У цій техніці ми створюємо нові класи та безпечно переміщуємо функціональні можливості між старими та новими класами. Деталі впровадження ми приховуємо від загального доступу.
Тепер постає питання… коли переміщувати функції між класами або як визначити, що настав час переміщувати функції між класами?
Коли ви виявите, що клас має так багато обов’язків і надто багато справ відбувається, або коли ви виявите, що клас непотрібний і нічого не робить у програмі, ви можете перемістити код з цього класу в інший клас і видалити його взагалі.
Приклади: переміщення поля, вилучення класу, переміщення методу, вбудований клас, приховання делегату, введення стороннього методу, видалення посередника, введення локального розширення тощо.
6. Підготовчий рефакторинг
Цей підхід найкраще використовувати, коли ви помічаєте потребу в рефакторингу під час додавання нових функцій у програму. Тож в основному це частина оновлення програмного забезпечення з окремим процесом рефакторингу. Ви врятуєте себе від майбутніх технічних боргів, якщо помітите, що код потрібно оновити на попередніх етапах розробки функції.
Кінцевий користувач не може бачити такі зусилля команди інженерів віч-на-віч, але розробники, які працюють над програмою, побачать цінність рефакторингу коду під час створення програми. Вони можуть заощадити свій час, гроші та інші ресурси, якщо просто витратять час на оновлення коду раніше.
Це схоже на те, що я хочу проїхати 100 миль на схід, але замість того, щоб просто блукати лісом, я збираюся проїхати 20 миль на північ до шосе, а потім я проїду 100 миль на схід із швидкістю, яка в три рази перевищує швидкість, яку я міг би мати, якби Я просто пішов туди. Коли люди змушують вас йти прямо туди, іноді вам потрібно сказати: «Почекай, мені потрібно перевірити карту та знайти найшвидший маршрут». Підготовчий рефакторинг робить це за мене.
Джессіка Керр (Розробник програмного забезпечення)

7. Рефакторинг інтерфейсу користувача
Ви можете вносити прості зміни в інтерфейс і рефакторинг коду. Наприклад: вирівняти поле введення, застосувати шрифт, змінити слово активним голосом, указати формат, застосувати загальний розмір кнопки та збільшити контраст кольорів тощо.
Заключні слова
Ви повинні розглядати процес рефакторингу коду як очищення будинку. Непотрібний безлад у домі може створити хаотичне та стресове середовище. Те саме стосується написаного коду. Чистий і добре організований код завжди легко змінити, легко зрозуміти та легко підтримувати. Ви не зіткнетеся з труднощами пізніше, якщо звернете увагу на процес рефакторингу коду раніше.
Два найвпливовіших розробника програмного забезпечення Мартін Фаулер і Кент Бек присвятили свій час поясненню процесу рефакторингу коду та його методів. Вони також написали повну книгу на цю тему Рефакторинг: покращення дизайну існуючого коду . У цій книзі описані різні техніки рефакторингу з чітким поясненням роботи над процесом рефакторингу. Ми рекомендуємо вам прочитати цю книгу, якщо ви хочете глибше ознайомитися з процесом рефакторингу коду.