Comments 11
Более интутивно понятный подход в сравниении с FSD
Работала и с проектами на Bulletproof React и с проектами на FSD. Проекты на FSD это кашекод в котором крайне трудно что то искать, в отличие от Bulletproof.
Видно, что автор этого подхода действительно его выстрадал, поработав с десятком проектов на лапшекоде Redux и разочаровавшись в FSD. И в целом сделал логичный следующий шаг, решив несколько проблем легаси-проектов.
Осталась всего сотня-две таких шагов и получится что-то нормальное - без прибивания гвоздями к Реакту, хукам, с нормальной файлогенерацией и автовалидацией, со встроенным эффективным feedback loop для LLM, со стабильными SSR / Widget режимами, без 2-3мб бандла на старте и т.п. И пройдя это все и протестируя на десятках проектов с разного размера командами, окажется что Flat Architecture (я предпочитаю называть "классическая файловая структура") не так уж и плоха, если скомпоновать в формализованные слои.
Но как шаг для борьбы с легаси в условном 2018 году выглядит отлично. Как старт для новых проектов - очень сомнительно.
Я как раз не стал бы использовать flat architecture на новых проектах, если есть четкое осознание что проект планируется вырастить до 100К+ строк кода. Все что меньше - на самом деле без разницы какой подход применять.
Имею удовольствие поддерживать подобный легаси-проект, стартовавший в середине 10х, плоская структура доставляет много боли, потому что люди на проекте менялись и каждый привносил свое видение модулей, не было какой-то единой методологии, дерево из сотен компонентов превратилось в кашу. На подобный проект (новый) прямо сейчас я бы взял или усеченный FSD (отточили на еще одном проекте) или Bulletproof. Скорее второе, т.к. FSD даже на средних размеров проектах вызывает фрустрации внутри команды. Bulletproof в этом плане выглядит проще и интуитивно понятнее.
Между UI State и Application State в некоторых более-менее сложных приложениях есть еще один уровень стейт менеджемента - это локализованные состояния для группы компонентов связанных между собой горизонтально и/или вертикально. Назвать ее можно как угодно: Widget State, Feature State. Это в основном композиции из нескольких компонентов которые все вместе образуют какой то цельный виджет или логику. Выносить состояния на уровень Application State размазывает локальную логику на глобал, а опустить на уровень UI State (useState, useReducer, Context) приводит к запутанным и не оптимизированным конструкциям типа prop drilling
Если у вас useContext приводит к prop drilling, значит вы неправильно его используете
Я немного скомкал этот момент, context приводит к неоптимизированным и бойлерплейтным многословным конструкциям а те другие к prop drilling
Господи что за бред
Никаких строгих правил нет на самом деле, это тот же человеческий фактор
Подход не решает никаких проблем
Но и добавляет новых
Одна и та же кнопка нужна в двух фичах, вы предлагаете их дублировать
И опять удобная фраза "не серебряная пуля"...
Хватит жрать кактус
https://habr.com/ru/articles/1018288/#silver-bullet
Пора уже проблемы реально решать
Золотое правило: Если компонент не переиспользуется в двух+ фичах, ему не место в общей components. Он должен жить внутри своей фичи.
Получается если компонент будет переиспользоваться в двух+ фичах, то ему место в общей components? Это же тот же хаос создастся:)
Разбираем Bulletproof React: как не утонуть в хаосе собственного кода