WARNING
Эта статья сгенерирована AI и требует ручной доработки.
Лучшие практики
В этом материале собраны практики, которые помогают держать структуру FEOD чистой, предсказуемой и масштабируемой.
1. Уровни и направление импорта
Базовое правило FEOD: верхние уровни знают о нижних, но не наоборот.
Допустимое направление импорта: app -> pages -> modules -> commonglobal доступен без импорта.
Примеры:
// OK: app импортирует страницы
import { HomePage } from '@/pages/home'
// OK: pages импортируют модули
import { userProfile } from '@/modules/UserProfile'
// OK: модули импортируют common
import { formatDate } from '@/common/utilities/formatDate'2. Публичный API модулей
Модуль должен быть изолирован. Единственная точка входа — index.ts.
// modules/UserProfile/index.ts
export { useUserProfile } from './composables/useUserProfile'
export type { UserProfile } from './types'Запрещены импорты внутренних файлов модуля извне:
// Плохо: глубокий импорт
import { useUserProfile } from '@/modules/UserProfile/composables/useUserProfile'3. Common должен оставаться тонким
Сущности в common:
- не привязаны к бизнес-фичам;
- обычно умещаются в один файл;
- не используют
index.ts.
Если сущность разрастается — это сигнал вынести её в modules.
4. Фрактальность вместо новых уровней
Если модуль растёт, не создавайте новые горизонтальные срезы — делите его на подмодули:
modules/
Billing/
modules/
Invoices/
Payments/Подмодули следуют тем же правилам, что и верхний уровень.
5. Pages остаются тонкими
Страница — это точка входа в сценарий, а не место для бизнес-логики. Логика живёт в модулях, а страницы их композиционируют.
6. App содержит только запуск и интеграции
В app находятся:
- точка входа;
- маршрутизация;
- интеграции внешних сервисов;
- глобальные лейауты.
Никакой бизнес-логики, которая должна жить в модулях.
7. Global используйте только при необходимости
global предназначен для сущностей, доступных без импорта:
- глобальные типы;
- полифиллы;
- shim-ы библиотек.
Если сущность требует импорта — это не global.
8. Имена должны говорить о роли
Называйте модули по доменной ответственности, а не по техническим деталям.
modules/
UserProfile/
OrderHistory/
AccessControl/Избегайте слишком общих имён (User, Data, Utils) и сокращений.