Что такое рефакторинг архитектуры приложения и какие виды бывают
Что проверяют
Отличаете ли вы рефакторинг от переписывания и умеете ли вести его так, чтобы продукт не вставал. На фронтенде вопрос почти всегда прикладной: в проекте накопилась каша из слоёв, и нужен человек, который разберёт её по частям, а не предложит начать с нуля.
Как отвечать
Рефакторинг это изменение внутренней структуры без изменения наблюдаемого поведения. Архитектурный отличается масштабом: меняются границы модулей и направление зависимостей, а не тело одной функции.
Виды, которые реально встречаются на фронтенде:
- разделение по слоям и границам: свой слой доступа к данным, нарезка по фичам, запрет импортов вверх по слоям;
- вынос состояния: серверные данные в кэш запросов, локальное состояние в компонент, глобальный стор только для действительно разделяемого;
- сдвиг границы между сервером и клиентом: выборка данных в серверных компонентах, уменьшение клиентского бандла;
- извлечение переиспользуемого: общая дизайн-система вместо десятка почти одинаковых кнопок;
- дробление на отдельно собираемые части там, где команд действительно несколько.
Как вести: сначала тесты, фиксирующие текущее поведение, дальше мелкие шаги отдельными коммитами. Для крупного переезда применяют постепенное замещение за флагом: новая реализация растёт рядом со старой, трафик переводится по частям, старый код удаляется, когда доля дошла до конца.
Где спотыкаются
Смешивают рефакторинг и новую функциональность в одном коммите. Потом невозможно понять, что именно дало регресс, а ревью превращается в чтение огромного диффа, где никто уже ничего не ищет.
Называют рефакторингом оптимизацию и обновление библиотек. Первое меняет нефункциональные характеристики и требует замеров до и после, второе меняет чужой код; к переустройству собственных границ ни то, ни другое отношения не имеет.
Затевают большой переезд без критерия готовности и без тестов. Полгода двойной поддержки, половина экранов на старом подходе, половина на новом, и следующий разработчик предлагает начать всё заново.