🔥

Тред (Сергей Сова)


Какие компоненты класть в UI, а что оставить в фиче? Сразу стоит понять, что компоненты во фронтенд проекте могут лежать в любой директории.

Разделение проекта на директории необходимо, чтобы понимать назначение лежащих внутри файлов, как их менять и что может быть потенциально опасно для модификации. Например, в lib вполне может лежать реализация onClickOutside с хуком React, или же модальные окна с особой логикой.

Важно, чтобы в такой библиотечный код не протекали особенности бизнеса. Ведь если такое случится модифицировать и переиспользовать такой станет очень сложно и чревато ошибками. То же самое относится к директории ui.

UI это внутренняя библиотека строительных блоков проекта. Я уверен, что в любом проекте можно выделить внушительную пачку компонентов без четкой области применения.

Такие компоненты называются контекстонезависимыми. Ведь для использования компонента не нужно учитывать контекст использования и окружающую логику.

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

Чего нельзя с уверенностью сказать про компонент профиля текущего пользователя. Используя тот компонент, можно построить только верхнеуровневые компоненты для авторизованного пользователя. Для гостя этот компонент более, чем бесполезен, вот так и возникает контекст.

Ставьте лайкосы твитам, а то непонятно, интересно это или я просто не во время пишу твиты и их не видят. Какой там прайм-тайм в IT-твиттере?

У твиттера отвратная аналитика по твитам. Даже у гитхаба и simplecast сильно лучше.

Все компоненты без контекста я укладываю в UI, всякие библиотечные реализации в lib, но только если там есть дополнительный код для обслуживания.

А вот компоненты с четким контекстом располагаются по фичам. Причем необходимо четко определить область применения компонентов, а для этого достаточно, чтобы компонент решал лишь одну общую задачу.