Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: Feature-Sliced Design, entities, domain logic, business logic, software architecture

Когда следует выделять сущности (entities) в Feature-Sliced Design?

Вопрос проверяет понимание принципов декомпозиции в Feature-Sliced Design и умение определять, когда бизнес-логика становится достаточно сложной для выделения в отдельную сущность.

Короткий ответ

Сущности (entities) в Feature-Sliced Design выделяют, когда появляется бизнес-логика, общая для нескольких фич или слоёв. Это объекты, которые описывают ключевые понятия предметной области, например, Пользователь, Заказ, Продукт. Их выделяют, чтобы избежать дублирования кода и обеспечить единую точку истины для бизнес-правил. Обычно это происходит на этапе проектирования, когда видно, что одни и те же данные и операции используются в разных местах.

Длинный ответ

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

Когда выделять сущности?

Сущности стоит выделять в следующих случаях:

  • Повторяющаяся бизнес-логика: Когда одни и те же данные и правила их обработки (валидация, вычисления) используются в нескольких фичах (features) или виджетах (widgets). Например, объект User с методами проверки прав доступа.
  • Ключевые понятия предметной области: Когда в приложении есть центральные объекты, которые описывают суть бизнеса (например, Order, Product, Invoice). Их выделение делает код более понятным и устойчивым к изменениям.
  • Независимость от UI и внешних источников: Когда логика должна существовать отдельно от способа её отображения (UI) или конкретного API. Сущности не знают о React-компонентах или HTTP-запросах.

Пример кода

Рассмотрим пример сущности Product в приложении интернет-магазина:

// src/entities/product/model/product.ts
type Currency = 'USD' | 'EUR';

export class Product {
  constructor(
    public readonly id: string,
    public name: string,
    public price: number,
    public currency: Currency,
    public stockCount: number
  ) {}

  // Бизнес-правило: товар доступен для заказа
  isAvailable(): boolean {
    return this.stockCount > 0;
  }

  // Бизнес-правило: форматированная цена
  getFormattedPrice(): string {
    return `${this.price} ${this.currency}`;
  }

  // Бизнес-правило: проверка возможности применения скидки
  canApplyDiscount(discountPercent: number): boolean {
    return discountPercent > 0 && discountPercent <= 50;
  }
}

Эта сущность инкапсулирует данные товара и базовые бизнес-правила. Её могут использовать различные фичи: "карточка товара", "корзина", "админ-панель для управления товарами".

Где применяются сущности?

Сущности используются в слоях выше:

  • В features для построения конкретной пользовательской логики.
  • В widgets для компоновки интерфейсов, работающих с этими данными.
  • В shared слое могут быть утилиты для работы с сущностями (например, специфичные форматеры).

Важно, что сущности не содержат код, связанный с UI, состоянием приложения (как Redux) или сетевыми запросами. Они представляют собой чистую бизнес-логику.

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    3

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

  • React

    React

Ключевые слова

#Feature-Sliced Design

#entities

#domain logic

#business logic

#software architecture

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию