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

Публичный API слайса

Вопрос

Что такое публичный API слайса в FSD и зачем он нужен?

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

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

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

Коротко

Каждый слайс наружу выставляет index.ts, и снаружи импортируют только оттуда: Зачем. Во-первых, внутренности можно переставлять как угодно, пока индекс не изменился.

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

  • каждый слайс и сегмент отдаёт наружу index-файл

  • снаружи импортируют только из него, не из внутренностей

  • это даёт свободу перекладывать файлы внутри слайса

  • видно, что считается контрактом, а что деталью

  • на крупных проектах бьёт по скорости сборки - сюда помогает eslint, а не бочка ре-экспортов

  • нарушение ловится линтером по глубине пути импорта

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

  • Чем это отличается от barrel-файлов, за которые ругают?

Разбор

Каждый слайс наружу выставляет index.ts, и снаружи импортируют только оттуда:

// можно
import { ProductCard } from '@/entities/product';
// нельзя
import { ProductCard } from '@/entities/product/ui/ProductCard/ProductCard';

Зачем. Во-первых, внутренности можно переставлять как угодно, пока индекс не изменился. Во-вторых, по индексу сразу видно контракт слайса - что он вообще умеет.

Оговорка, о которой стоит сказать самому: бесконтрольные бочки ре-экспортов замедляют сборку и мешают tree-shaking. На больших проектах индекс держат тонким и не тащат в него всё подряд, а запрет на глубокие импорты обеспечивают линтером.

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

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

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