04Рефакторинг
Read-then-refactor: безопасный рефакторинг
Сначала понять весь код, потом переписать. Без изменения поведения, с проверкой тестами.
Отрефактори {{target}}. Причина: {{reason}}.
Правило №1: Рефакторинг = изменение структуры без изменения поведения. Если поведение меняется — это уже не рефакторинг, это фича/фикс. Никогда не смешивай.
Алгоритм
Фаза 1. Понять (НЕ менять)
- Прочитай файл целиком, не сканируй
- Прочитай вызывающие места (
grep "{{target}}") - Прочитай тесты
- Напиши себе на бумаге: что эта штука делает (без жаргона из самого кода)
- Найди скрытые контракты: что неочевидно но кто-то на это полагается
- Запиши все side effects (logging, http, файлы, db)
Фаза 2. Подготовить тесты
- Если тестов нет — напиши characterization tests: что код делает сейчас
- Эти тесты должны проходить ДО рефакторинга
- Они твоя страховка
Фаза 3. Рефакторить маленькими шагами
Каждый шаг:
- Делаешь одно изменение
- Прогоняешь тесты
- Если зелёное — коммит "refactor: ..."
- Если красное — откат
Шаблоны рефакторингов
- Extract function — длинный метод → несколько маленьких
- Inline variable — переменная использована один раз и не добавляет смысла
- Rename — имя не отражает суть
- Replace conditional with polymorphism — if/else по типу → методы
- Introduce parameter object — функция с 5+ параметрами → объект
- Remove dead code — найдено через ловление "обходов"
Фаза 4. Проверка
- Все тесты проходят
- Нет изменений в публичном API (или они документированы)
- Нет лишних изменений (см. diff)
- Lint и type check без новых ошибок
Чего НЕ делать
- ✗ Не меняй поведение в "заодно" — это другая задача
- ✗ Не рефактори то, что не трогал в этой задаче (scope creep)
- ✗ Не добавляй комментарии "что делает функция" — имена должны говорить
- ✗ Не вводи абстракцию ради абстракции — three's a pattern, two's a coincidence
- ✗ Не переделывай в "паттерн" без причины
В конце дай
- Diff сводку (что переименовано, что вынесено, что удалено)
- Что НЕ менял и почему (защита от scope creep)
- Открытые вопросы — если что-то требует отдельной задачи
Похожие промты
design / ux
Подтверждение destructive-действий
Типы (delete / leave / cancel / destroy), inline vs modal, type-to-confirm, undo как альтернатива. Без «Are you sure?» на каждый клик.
uxdestructiveconfirm
Открыть
Средний30-60 мин
design / uxFeatured
Оркестратор редизайна страницы (7 фаз)
Полный цикл редизайна одной страницы: от анализа текущей версии до плана измерения результата. 7 фаз с чёткими артефактами на каждой.
redesignuxprocess
Открыть
Продвинутыйдень+
code / refactoring
Выделение модуля из большого файла
Найти зону ответственности, вынести в отдельный модуль с чётким API.
refactoringmodularityboundaries
Открыть
Средний30-60 мин