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

WARNING

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

Переход на FEOD

Если вы решили перейти на FEOD в существующем проекте, рекомендуется делать это постепенно. В этом разделе мы рассмотрим пошаговый процесс миграции.

Пошаговый план миграции

Шаг 1: Выделение App

Начните с выделения app для входной точки приложения. Соберите всё, что относится к запуску и настройке приложения:

  • Роутер
  • Конфигурации
  • Интеграции с внешними сервисами
  • Лейауты
  • Точки входа (entry.ts, main.ts)

До:

  • src
    • router
    • config
    • main.ts
    • App.vue

После:

  • src
    • app
      • router
      • config
      • entry.ts
      • App.vue

Шаг 2: Определение Pages

Определите и структурируйте pages. Соберите все страницы приложения и организуйте их по файловой структуре, соответствующей роутингу.

До:

  • src
    • views
      • Home.vue
      • About.vue
      • Login.vue

После:

  • src
    • pages
      • home.vue
      • about.vue
      • login.vue

Шаг 3: Выделение Common

Выделите common для общих утилит и компонентов. Переместите всё, что используется в разных частях приложения и не привязано к конкретной бизнес-логике.

До:

  • src
    • components
      • Button.vue
      • Input.vue
    • utils
      • helpers.ts
      • formatDate.ts

После:

  • src
    • common
      • ui
        • Button.vue
        • Input.vue
      • utilities
        • helpers.ts
        • formatDate.ts

Шаг 4: Постепенное выделение модулей

Постепенно выделяйте модули из оставшегося кода. Начните с наиболее изолированных функциональных областей.

Пример:

До:

  • src
    • components
      • Auth
        • LoginForm.vue
        • RegisterForm.vue
    • store
      • auth.js
    • api
      • auth.js

После:

  • src
    • modules
      • Auth
        • components
          • LoginForm.vue
          • RegisterForm.vue
        • store
          • auth.js
        • api
          • auth.js
        • index.ts

Шаг 5: Создайте Global

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

Пример:

  • src
    • globals
      • vue-extensions.d.ts
      • polyfills.ts

Пример полной миграции

Рассмотрим пример миграции небольшого приложения для управления задачами (Todo App).

Исходная структура

  • src
    • components
      • TodoList.vue
      • TodoItem.vue
      • TodoForm.vue
      • Button.vue
      • Input.vue
    • views
      • Home.vue
      • About.vue
    • store
      • todos.js
    • router
      • index.js
    • utils
      • formatDate.ts
    • api
      • todos.js
    • App.vue
    • main.js

Структура после миграции

  • src
    • app
      • router
        • index.ts
      • entry.ts
      • App.vue
    • pages
      • home.vue
      • about.vue
    • modules
      • Todos
        • components
          • TodoList.vue
          • TodoItem.vue
          • TodoForm.vue
        • store
          • todos.js
        • api
          • todos.js
        • types
          • todo.types.ts
        • index.ts
    • common
      • ui
        • Button.vue
        • Input.vue
      • utilities
        • formatDate.ts
    • main.js

Детали миграции

1. Создание модуля Todos

ts
// modules/Todos/index.ts
export { default as TodoList } from './components/TodoList.vue'
export { default as TodoItem } from './components/TodoItem.vue'
export { default as TodoForm } from './components/TodoForm.vue'
export { useTodosStore } from './store/todos'
export { fetchTodos, createTodo, updateTodo, deleteTodo } from './api/todos'
export type { Todo } from './types/todo.types'

2. Обновление импортов

До:

vue
<script setup>
import TodoList from '@/components/TodoList.vue'
import { useTodosStore } from '@/store/todos'
</script>

После:

vue
<script setup>
import { TodoList, useTodosStore } from '@/modules/Todos'
</script>

3. Обновление роутера

До:

ts
// router/index.js
import Home from '@/views/Home.vue'
import About from '@/views/About.vue'

После:

ts
// app/router/index.ts
import Home from '@/pages/home.vue'
import About from '@/pages/about.vue'

Рекомендации по миграции

  1. Делайте миграцию постепенно — не пытайтесь переделать всё сразу
  2. Начните с нового функционала — применяйте FEOD к новым фичам, постепенно мигрируя старые
  3. Используйте поиск и замену — автоматизируйте обновление импортов где возможно
  4. Тестируйте после каждого шага — убедитесь, что приложение работает после каждого изменения
  5. Документируйте процесс — фиксируйте изменения для команды

Типичные проблемы при миграции

Циклические зависимости

Проблема: Модули импортируют друг друга напрямую.

Решение: Используйте IoC (Inversion of Control) для разрыва циклических зависимостей.

Слишком большие модули

Проблема: Модуль становится слишком большим и содержит несвязанную функциональность.

Решение: Разбейте модуль на подмодули или выделите отдельные модули.

Неясность, куда поместить сущность

Проблема: Непонятно, относится ли сущность к common или к модулю.

Решение:

  • Если сущность привязана к бизнес-логике → модуль
  • Если сущность универсальна и не привязана к бизнесу → common

Чеклист миграции

  • [ ] Выделен уровень app
  • [ ] Организованы pages
  • [ ] Выделен common
  • [ ] Определены основные модули
  • [ ] Обновлены все импорты
  • [ ] Создан global (если нужен)
  • [ ] Обновлена документация
  • [ ] Команда обучена новой структуре