Size: a a a

2018 October 30
Feature Slices
Feature Slices

Этот подход давно используется в .NET
По сути те же модули, но с формальными правилами
источник
Feature Slices
Все компоненты разделяем на две группы:
- UI — чистые презентационные компоненты
- features — компоненты, несущие в себе бизнес-ценность
источник
Feature Slices
UI — должны быть максимально переиспользуемыми компонентами.
Я использую методологию @AtomicDesign для организации компонентов
источник
Feature Slices
Features — большие уникальные модули, содержащие компоненты, редюсеры, экшены и апи.
источник
Feature Slices
Чтобы лучше понять идеологию фич, можно провести аналогию с трекером задач: фича это одна уникальная функциональность в пределах проекта.

Каждая директория здесь, это бизнес-сущность, которую в теории можно выделить в отдельный npm-пакет.

Разделение сущностей должно отображать структуру проекта в интерфейсе.
источник
Feature Slices
Все фичи без исключения должны иметь одинаковую структуру директорий.

Если директория не содержит файлов, не нужно создавать её “ради структуры”.
источник
Feature Slices
У каждой фичи должно быть публичное API, через которое её можно использовать.

В этом файле экспортируется только то, что будет использоваться снаружи фичи. Желательно не использовать export *

Из других частей проекта, нужно импортировать только через публичное API. Не нужно лезть импортами в кишки фич — это прямое нарушение инкапсуляции.
источник
Feature Slices
Фичи можно вкладывать друг в друга.
Вложение должно определяться потребностью бизнес-логики/структурой проекта.
источник
Feature Slices
@AtomicDesign + Feature Slices
источник
Feature Slices
В ui/ компоненты разложены по уровням
источник
Feature Slices
Каждый уровень это плоский список директорий.
источник
Feature Slices
Каждый уровень имеет файл index.js с именованными экспортами модулей.

Лучше не использовать export *
источник
Feature Slices
Каждый компонент должен иметь документацию и тесты.
источник
Feature Slices
В фичах также могут быть директории уровней @AtomicDesign.
источник
Feature Slices
Директорию components/ можно превратить в pages/ отказом от разделения на контейнеры/компоненты
источник
Feature Slices
Контейнеры

Redux использует такие понятия, как компоненты и контейнеры.
источник
Feature Slices
Но сами по себе контейнеры являются компонентами
источник
Feature Slices
и вроде бы, множество всех компонентов содержит в себе множество контейнерных

но это никто не отображает на структуре директорий
источник
Feature Slices
источник
Feature Slices
Документация redux вносит ещё больше недоразумения в именование, добавляя ещё два термина: умный и глупый

Мне кажется это несколько криво. Я предлагаю отказаться от такого именования и подхода целиком.

Незачем разделять ОДНУ сущность на две, без прямой необходимости.
источник