Перейти к основному содержимому

Сегменты

См. также: Слои и архитектура для детального описания каждого слоя.

СегментНазначениеПример
uiUI-компоненты и стилиarticle-card.tsx
modelСостояние, бизнес-логика, типыarticle.types.ts, use-article.ts
apiСложные API-операции с доменной логикойatomic-update.ts, batch-operations.ts
libУтилиты конкретного слайсаslugify.ts, format-date.ts

Как выбрать правильный сегмент?

Используйте эту схему при добавлении нового кода в слайс:

Важное правило для сегмента api

MUST: CRUD операции (get, create, update, delete) размещаются в shared/api/endpoints/

FORBIDDEN: Размещать CRUD операции в entities/*/api/ или features/*/api/

MAY: Сегмент api в entities/features используется для сложных API-операций с доменной логикой:

  • Атомарные обновления с rollback
  • Batch-операции с транзакциями
  • Сложная оркестрация нескольких API-вызовов с бизнес-правилами

Примеры:

// ✅ ПРАВИЛЬНО: CRUD в shared/api/endpoints/
// shared/api/endpoints/article.api.ts
export async function getArticle(slug: string): Promise<ArticleDTO> {
const { data } = await apiClient.get<{ article: ArticleDTO }>(`/articles/${slug}`);
return data.article;
}

// ✅ ПРАВИЛЬНО: Сложная доменная операция в entities/api/
// entities/order/api/atomic-update.ts
export async function updateOrderWithRollback(orderId: string, updates: OrderUpdate) {
// Сложная логика с rollback, валидацией инвариантов, etc.
}

// ❌ НЕПРАВИЛЬНО: Дублирование CRUD в entities
// entities/article/api/get-article.ts
export async function getArticle(slug: string) { // НЕ ДЕЛАЙТЕ ТАК!
return apiClient.get(`/articles/${slug}`);
}

📌 Ключевые моменты:

  • ui/ - UI-компоненты и стили
  • model/ - Состояние, бизнес-логика, типы
  • api/ - Только сложные доменные операции (НЕ CRUD!)
  • lib/ - Утилиты конкретного слайса
  • MUST: CRUD операции всегда размещаются в shared/api/endpoints/
  • FORBIDDEN: Дублирование CRUD операций в слайсах