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

Чем feature отличается от entity

Вопрос

Самый частый вопрос по FSD: чем feature отличается от entity? Куда положить кнопку «добавить в корзину» и почему.

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

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

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

Коротко

Простое правило: entity - существительное, feature - глагол. entities/product - что такое товар: тип, запрос за ним, карточка, которая его показывает. features/add-to-cart - действие: кнопка, обработчик, мутация, оптимистичное обновление. Кнопка «добавить в корзину» - feature.

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

  • entity - существительное: о чём приложение, данные и их представление

  • feature - глагол: что пользователь делает

  • кнопка «добавить в корзину» - feature, потому что это действие

  • карточка товара - entity, она только показывает

  • feature может использовать entity, наоборот нельзя

  • признак: если из блока убрать взаимодействие и он останется осмысленным - это entity

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

  • А если действие нужно на трёх страницах по-разному?
  • Куда положить бизнес-логику расчёта скидки?

Разбор

Простое правило: entity - существительное, feature - глагол.

entities/product - что такое товар: тип, запрос за ним, карточка, которая его показывает. features/add-to-cart - действие: кнопка, обработчик, мутация, оптимистичное обновление.

Кнопка «добавить в корзину» - feature. Она не про то, что такое товар, а про то, что с ним делают. Кладут её в фичу, а карточка товара из entities принимает её children или слотом - так карточка не узнаёт про корзину.

Проверка на практике: убери из блока всё интерактивное. Осталось что-то осмысленное - это entity. Ничего не осталось - feature.

Частая ошибка - складывать в entities всё, что связано с товаром, включая действия. Тогда entities/product начинает импортировать корзину, появляется цикл, и слой теряет смысл.

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

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

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