← Назад к вопросам

Что такое High Cohesion в FSD?

2.0 Middle🔥 191 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

High Cohesion в Feature-Sliced Design (FSD)

High Cohesion (высокая связанность) в контексте Feature-Sliced Design (FSD) — это архитектурный принцип, который означает, что логически связанные элементы (компоненты, модули, сущности) должны быть сгруппированы вместе внутри одного слоя (layer) и среза (slice) архитектуры, минимизируя зависимости на внешние модули и обеспечивая четкую, понятную ответственность для каждой части системы.

Сущность High Cohesion в FSD

В FSD кодовая база организуется вокруг фич (features) — бизнес-логических возможностей продукта (например, "аутентификация", "лента новостей", "профиль пользователя"). Каждая фича структурирована по слоям, отражающим уровень абстракции:

  • app — инициализация, провайдеры, глобальные стили.
  • processes — бизнес-процессы, протекающие через несколько фич.
  • pages — композиция фич для конкретных страниц.
  • widgets — композиционные блоки из нескольких фич.
  • features — сама бизнес-логика фичи.
  • entities — бизнес-сущности (например, User, Product).
  • shared — переиспользуемый код (UI-кит, утилиты).

High Cohesion достигается, когда для одной фичи (например, feature/profile) в её слое features собраны все элементы, тесно связанные с этой бизнес-логикой:

  • Компоненты UI, специфичные для профиля.

Хуки и логика управления состоянием профиля. -(API-запросы для загрузки/обновления данных профиля. -(Типы и константы, используемые только в контексте профиля.

Пример структуры с высокой связанностью:

src/
├── features/
│   └── profile/              # Срез (slice) фичи "профиль"
│       ├── lib/              # Логика: хуки, утилиты, конфиги
│       │   ├── api/
│       │   │   └── fetchProfile.ts
│       │   └── hooks/
│       │       └── useProfileData.ts
│       ├── model/            # Модель: типы, стейт, селекторы
│       │   ├── types.ts
│       │   └── store.ts
│       ├── ui/               # UI: компоненты только для профиля
│       │   ├── ProfileCard/
│       │   │   ├── ProfileCard.tsx
│       │   │   └── ProfileCard.module.scss
│       │   └── EditProfileForm/
│       │       └── EditProfileForm.tsx
│       └── index.ts          # Публичный API фичи

Преимущества High Cohesion в FSD

  1. Упрощение навигации и понимания кода

    • Все, что относится к фиче, находится в одной директории. Разработчик, работающий над профилем, не должен "прыгать" по всему проекту.
  2. Снижение когнитивной нагрузки

    • Четкие границы ответственности. Легко ответить на вопрос: "Где находится логика для X?".
  3. Упрощение рефакторинга и тестирования

    • Изменения в одной фиче минимально затрагивают другие части системы. Тесты можно писать изолированно.
  4. Повышение переиспользуемости (в контролируемых рамках)

    • Фича с высокой связанностью предоставляет четкий публичный API (через index.ts), скрывая внутреннюю реализацию. Это делает её безопасной для использования в других слоях (например, в widgets или pages).

High Cohesion vs Low Cohesion

Для контраста, Low Cohesion (низкая связанность) в неправильно организованном проекте выглядела бы так: – Компоненты профиля разбросаны по папке components/.

  • Хуки для профиля — в hooks/.
  • Типы — в types/.
  • Стейт-менеджер — в store/.

Это приводит к спагетти-коду, где изменение одной фичи требует правок в десятках файлов по всему проекту.

Практические рекомендации по достижению High Cohesion

  • Строгое следование публичному API: Внутренние модули фичи не должны импортироваться напрямую извне. Используйте ре-экспорт через index.ts.
// features/profile/index.ts — публичный API
export { ProfileCard } from './ui/ProfileCard/ProfileCard';
export { useProfileData } from './lib/hooks/useProfileData';
export type { Profile } from './model/types';
// Внутренние модули, например, './lib/api/fetchProfile', НЕ экспортируются!

-H Избегайте создания "божественных" общих модулей: Не помещайте в shared то, что используется только одной фичей. Это снижает связанность.

-H Регулярный рефакторинг: При расширении фичи оценивайте, не появились ли в ней под-фичи, которые стоит выделить в отдельные срезы для поддержания высокой связанности каждой из них.

Заключение

High Cohesion в FSD — это не просто теоретический принцип, а практический инструмент для построения масштабируемых, поддерживаемых и предсказуемых фронтенд-приложений. Он напрямую влияет на скорость разработки, уменьшает количество ошибок и облегчает onboarding новых членов команды. В сочетании с другим ключевым принципом FSD — Low Coupling (слабой связанностью между модулями) — он формирует основу архитектуры, которая может расти вместе с продуктом, не превращаясь в "легаси" на ранних этапах.