Beta Документация для beta‑теста, возможны ошибки и неточности.
Перейти к содержимому

WARNING

Эта статья сгенерирована AI и требует ручной доработки.

Паттерны FEOD

В этой статье собраны практические паттерны, которые опираются на правила FEOD и помогают держать модули изолированными, а структуру — предсказуемой.

1. Публичный API модуля

Идея: любой доступ к модулю идёт через index.ts. Это защищает внутренности и упрощает рефакторинг.

modules/
  Billing/
    index.ts
    api/
    composables/
    types/
ts
// modules/Billing/index.ts
export { createInvoice } from './api/createInvoice'
export { useBilling } from './composables/useBilling'
export type { Invoice } from './types'

2. Фрактальный разрез

Идея: когда модуль становится слишком большим, выделяйте подмодуль без смены правил.

modules/
  Billing/
    modules/
      Invoices/
      Payments/

Подмодуль сам изолирован и экспортирует свой API через index.ts.

3. Композиция на уровне Pages

Идея: страницы не содержат бизнес-логики, они собирают модули в сценарий.

pages/
  dashboard/
    index.ts
ts
// pages/dashboard/index.ts
import { userSummary } from '@/modules/UserSummary'
import { billingOverview } from '@/modules/Billing'

export const dashboardData = {
  userSummary,
  billingOverview
}

4. Интеграции живут в App

Идея: внешние сервисы подключаются в app, а модули остаются независимыми.

app/
  integrations/
    analytics.ts
modules/
  Analytics/
    index.ts
ts
// app/integrations/analytics.ts
import { analyticsClient } from './clients/analyticsClient'
import { Analytics } from '@/modules/Analytics'

Analytics.configure(analyticsClient)

5. Вынос в Common только при универсальности

Идея: в common попадают только универсальные, одиночные сущности. Если требуется несколько файлов или появляется бизнес-смысл, это уже modules.

common/
  utilities/
    formatDate.ts
modules/
  Orders/
    utilities/
      calculateTotals.ts

6. Приватный модуль страницы

Идея: если странице нужна локальная логика, используйте приватный модуль с префиксом _.

pages/
  orders/
    index.ts
    _orders/
      index.ts
      components/

Приватный модуль не используется вне своей страницы.

7. Зигзагообразные импорты запрещены

Идея: подмодуль не должен импортировать внешний уровень своего модуля или соседний подмодуль другого модуля.

modules/
  A/
    modules/
      A1/
  B/
    modules/
      B1/

A1 не импортирует B1 напрямую — только публичный API B.