Cold StartСтудия разработки

Feature-Sliced Design:слой за слоем

6 мин.·3 апреля 2024 г.

Недавно мы дали обзор Feature-Sliced Design (FSD), обсудив его преимущества, недостатки и практическое применение. Развивая эту тему, в этой статье мы глубже рассмотрим преимущества FSD. В качестве бонуса — разберём пример eCommerce-проекта, построенного по принципам FSD.

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

Что отличает Feature-Sliced Design от других подходов?

Ключевые преимущества FSD

Модульная структура

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

Ориентация на фичи

В отличие от других методологий, которые организуют код по функциональному назначению или типу технологии (как MVC или MVVM), FSD организует код по фичам. Это означает, что всё необходимое для фичи — от логики до UI-компонентов — хранится вместе. Такой подход упрощает понимание устройства фичи, облегчает добавление или удаление функциональности и улучшает командное взаимодействие за счёт чёткого определения ответственности за каждую фичу.

Масштабируемость

FSD блестяще справляется с масштабированием. По мере роста приложений добавление новых фич или обновление существующих становится всё сложнее. Фичецентричная организация FSD в сочетании с модульной структурой позволяет командам масштабировать проекты горизонтально — добавляя новые фичи, или вертикально — улучшая существующие, без нарушения работы общей системы.

Переиспользуемость

Одно из ключевых преимуществ FSD — акцент на переиспользуемости. Организуя код в общие слои и изолируя логику фич, разработчики легко переиспользуют код в разных частях приложения. Это не только сокращает объём кода, но и обеспечивает единообразие во всём приложении.

Чёткие границы

FSD устанавливает чёткие границы между различными частями приложения. Такое разделение ответственности фундаментально важно для поддержания чистой кодовой базы. Оно определяет, где должна располагаться та или иная функциональность, облегчая разработчикам навигацию по проекту и эффективное управление зависимостями.

Упрощённое тестирование

С FSD тестирование становится проще. Поскольку фичи инкапсулированы вместе со своей логикой и компонентами, написание юнит- и интеграционных тестов для этих изолированных модулей не вызывает затруднений. Такая инкапсуляция гарантирует, что изменения в одной фиче минимально влияют на другие, облегчая регрессионное тестирование.

Улучшенная совместная работа

FSD спроектирован с учётом командной работы. Разбивая приложение на фичи и слои, несколько разработчиков или команд могут одновременно работать над разными аспектами проекта с минимальным пересечением. Такая параллельная разработка оптимизирует процесс и значительно сокращает time-to-market.

Гибкость

Несмотря на структурированный подход, FSD не является жёстким предписанием. Он предлагает гибкость в реализации фич и слоёв. Команды могут адаптировать методологию под конкретные требования и предпочтения проекта. Эта адаптивность делает FSD подходящим для широкого спектра проектов — от небольших стартапов до крупных корпоративных приложений.

Взгляд в будущее

FSD — это методология с перспективным мышлением. Она учитывает эволюционную природу веб-разработки и предоставляет надёжный фреймворк, способный адаптироваться к новым технологиям. Этот аспект защиты от устаревания гарантирует, что проекты, построенные по FSD, остаются актуальными и поддерживаемыми в долгосрочной перспективе.

Обзор структуры FSD

Теперь давайте создадим наглядный пример, чтобы пройтись по принципам и структуре Feature-Sliced Design на примере гипотетического веб-приложения. Представьте, что мы разрабатываем eCommerce-платформу «ColdShop», где пользователи могут просматривать товары, добавлять их в корзину и оформлять заказ.

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

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

Пример ColdShop

Шаг 1: определение структуры

Определим базовую структуру нашего приложения ColdShop по принципам FSD:

  • app: настройка и роутинг приложения.
  • pages: Главная, Карточка товара, Корзина, Оформление заказа.
  • features: Список товаров, Карточка товара, Управление корзиной, Форма оформления.
  • entities: Товар, Пользователь.
  • shared: UI-компоненты (Button, Input, Card), утилиты (API-клиент, валидаторы).

Шаг 2: реализация фичи — Список товаров

Для нашего примера сосредоточимся на фиче «Список товаров». Эта фича отвечает за отображение товаров в виде сетки, где каждый элемент показывает фото, название и цену. Пользователь может нажать на товар, чтобы посмотреть подробности.

Структура фичи:

  • ui: визуальные компоненты списка товаров (ProductCard, ProductGrid).
  • model: управление состоянием и логикой (загрузка товаров, фильтрация, сортировка).
  • lib: утилитные функции, специфичные для фичи списка товаров.

Рабочий процесс:

  • Model: реализация функций для загрузки данных о товарах с сервера.
  • UI: создание компонента ProductCard для отображения информации о товаре.
  • UI: разработка компонента ProductGrid, который использует компоненты ProductCard для создания сетки товаров.
  • Интеграция: использование модели для загрузки данных и отображения их в ProductGrid.

Шаг 3: связывание фич и страниц

Главная страница интегрирует фичу «Список товаров» для отображения каталога. Она использует компонент ProductGrid из фичи «Список товаров» и передаёт в него данные о товарах, загруженные через модель.

Когда пользователь кликает на товар в ProductGrid, он переходит на страницу «Карточка товара» — другую фичу, показывающую подробную информацию о товаре.

Шаг 4: управление состоянием и потоком данных

  • Entities: сущность Product является центральной для фичи «Список товаров». Она определяет структуру данных о товарах во всём приложении.
  • Shared-слой: используйте общие утилиты для загрузки данных с сервера и общие UI-компоненты для единообразного оформления приложения.

Заключение

Этот разбор демонстрирует, как FSD помогает создавать структурированные, масштабируемые и поддерживаемые фронтенд-приложения. Сфокусировавшись на конкретной фиче (Список товаров), мы увидели, как фичи являются самодостаточными, но при этом бесшовно интегрируются с другими частями приложения — страницами и сущностями. Модульный подход не только упрощает разработку и тестирование, но и улучшает командную работу, позволяя параллельно работать над разными фичами без конфликтов.

Иконка молотка

Расскажите
о задаче

Опишите, что хотите построить —разберёмся вместе.

Первый разговор — 30 минут, без обязательств
Объём и бюджет фиксируем до начала работы
Доступ к рабочей сборке на каждом этапе