Ответ вслух Senior Feature-Sliced Design обновлено

Перевод легаси на FSD

Вопрос

Как бы ты перевёл существующий проект со структурой «components/, hooks/, utils/» на FSD, не останавливая разработку?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Большой переезд одним PR не делаю: он ломает работу всей команде и тяжело ревьюится. Сначала договариваемся о правилах, фиксируем в ADR и делаем пару эталонных слайсов.

Что должно прозвучать в ответе

  • Постепенно: новые фичи сразу по FSD, старый код переносить при касании

  • Начать с shared и entities, потом features и widgets

  • Ввести алиасы и публичные API, запретить новые глубокие импорты линтером

  • Сначала линтер в режиме предупреждений, потом ошибки

  • Договориться о правилах в ADR и примерах, провести ревью первых слайсов

  • Не делать большой PR на весь проект

Что могут спросить следом

  • Как измеришь прогресс миграции?
  • Что делать с циклическими зависимостями?

Разбор

Большой переезд одним PR не делаю: он ломает работу всей команде и тяжело ревьюится. Сначала договариваемся о правилах, фиксируем в ADR и делаем пару эталонных слайсов. Затем снизу вверх: выделяю shared (UI-кит, api-клиент), потом сущности, потом фичи и виджеты. Новый код сразу пишется по FSD, старый переносится, когда его всё равно трогают. Линтер Steiger или eslint-plugin-boundaries включаю сначала предупреждениями, чтобы видеть масштаб, и запрещаю новые нарушения. Прогресс видно по числу оставшихся предупреждений. Циклы между старыми модулями разрываю выносом общего вниз.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме