04Рефакторинг
Выделение модуля из большого файла
Найти зону ответственности, вынести в отдельный модуль с чётким API.
Файл вырос: {{file}}. Помоги выделить из него модуль.
Шаги
1. Анализ ответственности
Прочитай файл и составь список того что он делает. Сгруппируй:
Группа A: ...
- Функция/класс 1
- Функция/класс 2
Группа B: ...
- ...
Группа C: ...
- ...
Если групп больше двух — у файла нарушен single responsibility. Хороший кандидат на выделение — самая независимая группа.
2. Определение границы
Для выделяемого модуля:
- Имя (короткое, описывает роль)
- Публичный API (минимальный — что снаружи видно)
- Зависимости (что нужно внутри, что приходит снаружи)
- Что становится приватным
3. Подготовка
- Запусти тесты — должны быть зелёные
- Если тестов на эту часть нет — напиши characterization tests
- Сделай коммит "WIP: before module extraction" — safety net
4. Извлечение
- Создай новый файл с пустым модулем
- Перенеси функции/классы по одной:
- Перенёс → исправил импорты → тесты прогнал
- Зелёное → коммит
- Не пытайся всё за раз
- Сделай API явным:
- Что экспортируешь — продумай
- Не экспортируй "вдруг пригодится"
- Минимальный публичный API
- Замени прямые обращения в старом файле на импорт
5. После
- Файлы меньше / понятнее
- Тесты проходят
- Импорты чистые
- Нет циклических зависимостей
- Можешь объяснить что делает новый модуль одним предложением
Признаки удачного выделения
- Можешь объяснить модуль за 10 секунд
- Можешь использовать в другом проекте без модификаций
- Тесты модуля — самодостаточны (не требуют моков соседних модулей)
Признаки неудачного выделения
- Новый модуль импортит много чего из старого
- Старому файлу всё ещё нужны внутренности нового
- API получился из 15+ функций
- Нужно сделать "ещё один файл-утилит"
В последнем случае — откатывайся, ищи другую границу.
Похожие промты
code / refactoring
Read-then-refactor: безопасный рефакторинг
Сначала понять весь код, потом переписать. Без изменения поведения, с проверкой тестами.
refactoringsafetyprocess
Открыть
Средний30-60 мин
code / refactoring
Улучшение имён в коде
Переименовать сущности так, чтобы код читался как текст: переменные, функции, типы, файлы.
refactoringnamingreadability
Открыть
Начальный15-30 мин
code / architecture
Ревью границ модулей
Где сейчас протекает абстракция, где модули знают слишком много друг о друге.
architectureboundariescoupling
Открыть
Продвинутый30-60 мин