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

Правило импортов и почему нельзя соседа

Вопрос

Сформулируй правило импортов в FSD. Почему нельзя импортировать соседний слайс того же слоя?

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

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

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

Коротко

Правило: импортировать можно только вниз по слоям и никогда - вбок. features/add-to-cart может взять entities/product и shared/ui. Но не может взять features/checkout, даже если очень нужно.

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

  • модуль импортирует только слои ниже себя

  • внутри слоя слайсы друг друга не видят

  • иначе появляются циклы и слайс перестаёт быть удаляемым

  • если двум слайсам нужно общее - оно опускается на слой ниже

  • или связывается на слое выше, который знает про оба

  • правило проверяется линтером, а не силой воли: eslint-plugin-boundaries, steiger

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

  • А shared может импортировать entities?
  • Что делать с типами, которые нужны и там и там?

Разбор

Правило: импортировать можно только вниз по слоям и никогда - вбок.

features/add-to-cart может взять entities/product и shared/ui. Но не может взять features/checkout, даже если очень нужно.

Почему вбок нельзя. Как только features/a знает про features/b, а b через месяц узнаёт про a, появляется цикл: ни одну из фич больше не выкинуть и не перенести, а сборщик начинает выдавать undefined при инициализации. Запрет вбок - это запрет циклов конструкцией, а не дисциплиной.

Что делать, когда общее всё-таки нужно:

  1. Опустить вниз. Общее знание о товаре - в entities/product, общий хелпер - в shared/lib.
  2. Связать сверху. Страница или виджет знает про обе фичи и передаёт им данные.
  3. Событие. Фичи общаются через шину или стор, не зная друг о друге.

И главное: правило должно проверяться автоматически. Руками его не удержать - в любом проекте через полгода появится «ну тут же очевидно можно».

Частые ошибки

  • Ответ «так принято»: нужна причина - циклы и невозможность удалить слайс.

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

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

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