WARNING
Эта статья сгенерирована AI и требует ручной доработки.
Переход на FEOD
Если вы решили перейти на FEOD в существующем проекте, рекомендуется делать это постепенно. В этом разделе мы рассмотрим пошаговый процесс миграции.
Пошаговый план миграции
Шаг 1: Выделение App
Начните с выделения app для входной точки приложения. Соберите всё, что относится к запуску и настройке приложения:
- Роутер
- Конфигурации
- Интеграции с внешними сервисами
- Лейауты
- Точки входа (entry.ts, main.ts)
До:
После:
Шаг 2: Определение Pages
Определите и структурируйте pages. Соберите все страницы приложения и организуйте их по файловой структуре, соответствующей роутингу.
До:
После:
Шаг 3: Выделение Common
Выделите common для общих утилит и компонентов. Переместите всё, что используется в разных частях приложения и не привязано к конкретной бизнес-логике.
До:
После:
Шаг 4: Постепенное выделение модулей
Постепенно выделяйте модули из оставшегося кода. Начните с наиболее изолированных функциональных областей.
Пример:
До:
После:
Шаг 5: Создайте Global
Если в проекте есть глобальные определения типов, полифиллы или расширения интерфейсов, создайте уровень global.
Пример:
Пример полной миграции
Рассмотрим пример миграции небольшого приложения для управления задачами (Todo App).
Исходная структура
Структура после миграции
Детали миграции
1. Создание модуля Todos
// 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. Обновление импортов
До:
<script setup>
import TodoList from '@/components/TodoList.vue'
import { useTodosStore } from '@/store/todos'
</script>После:
<script setup>
import { TodoList, useTodosStore } from '@/modules/Todos'
</script>3. Обновление роутера
До:
// router/index.js
import Home from '@/views/Home.vue'
import About from '@/views/About.vue'После:
// app/router/index.ts
import Home from '@/pages/home.vue'
import About from '@/pages/about.vue'Рекомендации по миграции
- Делайте миграцию постепенно — не пытайтесь переделать всё сразу
- Начните с нового функционала — применяйте FEOD к новым фичам, постепенно мигрируя старые
- Используйте поиск и замену — автоматизируйте обновление импортов где возможно
- Тестируйте после каждого шага — убедитесь, что приложение работает после каждого изменения
- Документируйте процесс — фиксируйте изменения для команды
Типичные проблемы при миграции
Циклические зависимости
Проблема: Модули импортируют друг друга напрямую.
Решение: Используйте IoC (Inversion of Control) для разрыва циклических зависимостей.
Слишком большие модули
Проблема: Модуль становится слишком большим и содержит несвязанную функциональность.
Решение: Разбейте модуль на подмодули или выделите отдельные модули.
Неясность, куда поместить сущность
Проблема: Непонятно, относится ли сущность к common или к модулю.
Решение:
- Если сущность привязана к бизнес-логике → модуль
- Если сущность универсальна и не привязана к бизнесу → common
Чеклист миграции
- [ ] Выделен уровень app
- [ ] Организованы pages
- [ ] Выделен common
- [ ] Определены основные модули
- [ ] Обновлены все импорты
- [ ] Создан global (если нужен)
- [ ] Обновлена документация
- [ ] Команда обучена новой структуре