Чем feature отличается от entity
Вопрос
Самый частый вопрос по FSD: чем feature отличается от entity? Куда положить кнопку «добавить в корзину» и почему.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
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 ошибок.