Проект на FSD состоит из слоев (layers), каждый слой состоит из слайсов (slices) и каждый слайс состоит из * *сегментов** (segments).
![[fsd.canvas]]
Слои стандартизированы во всех проектах и расположены вертикально. Модули на одном слое могут взаимодействовать лишь с модулями, находящимися на слоях строго ниже. На данный момент слоев семь (снизу вверх):
shared — переиспользуемый код, не имеющий отношения к специфике приложения/бизнеса. (например, UIKit, libs,
API)entities (сущности) — бизнес-сущности. (например, User, Product, Order)features (фичи) — взаимодействия с пользователем, действия, которые несут бизнес-ценность для пользователя. (
например, SendComment, AddToCart, UsersSearch)widgets (виджеты) — композиционный слой для соединения сущностей и фич в самостоятельные блоки (например,
IssuesList, UserProfile).pages (страницы) — композиционный слой для сборки полноценных страниц из сущностей, фич и виджетов.processesapp — настройки, стили и провайдеры для всего приложения.Затем есть слайсы, разделяющие код по предметной области. Они группируют логически связанные модули, что облегчает навигацию по кодовой базе. ==Слайсы не могут использовать другие слайсы на том же слое==, что обеспечивает высокий уровень связности (cohesion) при низком уровне зацепления (coupling).
В свою очередь, каждый слайс состоит из сегментов. Это маленькие модули, главная задача которых — разделить код
внутри слайса по техническому назначению. Самые распространенные сегменты — ui, model (store, actions), api и
lib (utils/hooks), но в вашем слайсе может не быть каких-то сегментов, могут быть другие, по вашему усмотрению.
В большинстве случаев рекомендуется располагать api
и config только в shared-слое.
Теги: [[FSD]]