Правило импортов и почему нельзя соседа
Вопрос
Сформулируй правило импортов в FSD. Почему нельзя импортировать соседний слайс того же слоя?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
модуль импортирует только слои ниже себя
внутри слоя слайсы друг друга не видят
иначе появляются циклы и слайс перестаёт быть удаляемым
если двум слайсам нужно общее - оно опускается на слой ниже
или связывается на слое выше, который знает про оба
правило проверяется линтером, а не силой воли: eslint-plugin-boundaries, steiger
Что могут спросить следом
- А
sharedможет импортироватьentities? - Что делать с типами, которые нужны и там и там?
Разбор
Правило: импортировать можно только вниз по слоям и никогда - вбок.
features/add-to-cart может взять entities/product и shared/ui. Но не может взять
features/checkout, даже если очень нужно.
Почему вбок нельзя. Как только features/a знает про features/b, а b через месяц
узнаёт про a, появляется цикл: ни одну из фич больше не выкинуть и не перенести, а
сборщик начинает выдавать undefined при инициализации. Запрет вбок - это запрет циклов
конструкцией, а не дисциплиной.
Что делать, когда общее всё-таки нужно:
- Опустить вниз. Общее знание о товаре - в
entities/product, общий хелпер - вshared/lib. - Связать сверху. Страница или виджет знает про обе фичи и передаёт им данные.
- Событие. Фичи общаются через шину или стор, не зная друг о друге.
И главное: правило должно проверяться автоматически. Руками его не удержать - в любом проекте через полгода появится «ну тут же очевидно можно».
Частые ошибки
- Ответ «так принято»: нужна причина - циклы и невозможность удалить слайс.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.