Вопрос проверяет понимание принципов декомпозиции в Feature-Sliced Design и умение определять, когда бизнес-логика становится достаточно сложной для выделения в отдельную сущность.
Feature-Sliced Design (FSD) — это архитектурная методология для фронтенд-приложений, которая предлагает чёткие правила для организации кода. Слой entities находится в самом низу иерархии и содержит бизнес-сущности, которые являются фундаментом предметной области приложения.
Сущности стоит выделять в следующих случаях:
User с методами проверки прав доступа.Order, Product, Invoice). Их выделение делает код более понятным и устойчивым к изменениям.Рассмотрим пример сущности 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;
}
}Эта сущность инкапсулирует данные товара и базовые бизнес-правила. Её могут использовать различные фичи: "карточка товара", "корзина", "админ-панель для управления товарами".
Сущности используются в слоях выше:
Важно, что сущности не содержат код, связанный с UI, состоянием приложения (как Redux) или сетевыми запросами. Они представляют собой чистую бизнес-логику.
Вывод: Сущности в FSD стоит выделять на ранних этапах проектирования, когда идентифицированы стабильные, повторно используемые понятия предметной области. Это создаёт прочный фундамент, уменьшает дублирование и упрощает тестирование бизнес-логики.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию