Рефакторинг зберігає зовнішню поведінку

Рефакторинг змінює внутрішню організацію коду, але не його зовнішній контракт. Його цілі — читабельність, менше дублювання, чіткі відповідальності, простіше тестування та менша звʼязаність.

Якщо змінюється результат для клієнта, це вже bugfix, feature, migration або інший тип роботи. Не маскуйте таку зміну під structural cleanup.

Спостережувана поведінкаПриклади
APIHTTP-статус, JSON, headers і публічні сигнатури
ПовідомленняКоди та тексти помилок
СтанЗаписи в БД, події, листи й webhooks
ПорядокПослідовність бізнес-перевірок і side effects

Інваріанти — що має залишитися незмінним

  • ті самі релевантні входи й вихідні дані;
  • ті самі винятки та повідомлення;
  • незмінний порядок перевірок, якщо він впливає на результат;
  • ті самі записи, події та побічні ефекти;
  • відсутність змін у public API.

Безпечні кандидати й небезпечні підміни

Може бути рефакторингомНе є чистим рефакторингом
Винести validation у private helperВиправити неправильний результат
Перейменувати private methodДодати новий user scenario
Спрощення умов без зміни логікиОновити framework або залежності
Прибрати дублюванняПереписати весь модуль або змінити API

Попросіть Claude спочатку про аналіз

  1. Знайдіть виклики, тести, залежності та межі модуля.
  2. Попросіть Claude назвати локальні structural candidates.
  3. Для кожного кандидата вимагайте користь, ризик і affected files.
  4. Оберіть одну структурну проблему.
  5. Зафіксуйте goal, non-goals та invariants.
  6. Лише потім доручайте один малий крок.

Правило одного рефакторинг-PR

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

Якщо мету не можна сформулювати без додавання «і ще», зміни, найімовірніше, потрібно розділити.

Канонічне джерело уроку · JavaRush

Відкрити матеріал JavaRush