Какие компоненты класть в UI, а что оставить в фиче?
Сразу стоит понять, что компоненты во фронтенд проекте могут лежать в любой директории.
Разделение проекта на директории необходимо, чтобы понимать назначение лежащих внутри файлов, как их менять и что может быть потенциально опасно для модификации. Например, в lib вполне может лежать реализация onClickOutside с хуком React, или же модальные окна с особой логикой.
Важно, чтобы в такой библиотечный код не протекали особенности бизнеса. Ведь если такое случится модифицировать и переиспользовать такой станет очень сложно и чревато ошибками. То же самое относится к директории ui.
UI это внутренняя библиотека строительных блоков проекта. Я уверен, что в любом проекте можно выделить внушительную пачку компонентов без четкой области применения.
Такие компоненты называются контекстонезависимыми. Ведь для использования компонента не нужно учитывать контекст использования и окружающую логику.
Пример: выпадающее меню составлено из выпадающего блока, списка и кнопки с иконкой. При этом, четкой области применения нет ни у самого меню, ни у элементов из которых оно состоит. Все это потенциально может быть использовано в любой части приложения.
Чего нельзя с уверенностью сказать про компонент профиля текущего пользователя. Используя тот компонент, можно построить только верхнеуровневые компоненты для авторизованного пользователя. Для гостя этот компонент более, чем бесполезен, вот так и возникает контекст.
Ставьте лайкосы твитам, а то непонятно, интересно это или я просто не во время пишу твиты и их не видят. Какой там прайм-тайм в IT-твиттере?
У твиттера отвратная аналитика по твитам. Даже у гитхаба и simplecast сильно лучше.
Все компоненты без контекста я укладываю в UI, всякие библиотечные реализации в lib, но только если там есть дополнительный код для обслуживания.
А вот компоненты с четким контекстом располагаются по фичам. Причем необходимо четко определить область применения компонентов, а для этого достаточно, чтобы компонент решал лишь одну общую задачу.