Files
OrionTV/MIGRATION_PLAN.md
Neil.X.Zhang 3b79d06b7d Update
2025-06-27 16:16:14 +08:00

105 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Web 功能至 React Native TV 应用迁移计划
## 1. 项目目标
将现有 `web` 项目 (基于 Next.js) 的核心功能,包括视频浏览、搜索、详情查看、播放记录和收藏,完整地迁移到 React Native TV 应用中,并为电视遥控器交互进行深度优化。
## 2. 核心策略
我们将采用**前后端分离**的核心策略:
- **后端服务**: 将 `web/src/app/api/` 中的所有 API 逻辑剥离出来,封装成一个独立的、使用 **Express.js** 构建的 Node.js 服务。该服务将通过 **Docker** 进行容器化,部署在您的私有服务器上。
- **TV 应用 (前端)**: React Native TV 应用将作为纯前端,负责 UI 展示和用户交互。它将通过网络请求调用上述独立的后端服务来获取和提交数据。
- **数据持久化**: 用户数据(播放记录、收藏等)将从 `localStorage` 迁移到 React Native 的 **`AsyncStorage`**,实现应用内的本地持久化存储。
## 3. 架构设计
迁移后的系统架构如下所示:
```mermaid
graph TD
subgraph "React Native TV 应用"
A[用户] -->|遥控器交互| B(TV 应用界面)
B -->|数据请求| C{数据服务层}
end
subgraph "本地存储"
C -->|读/写| D[AsyncStorage (播放记录, 收藏)]
end
subgraph "后端服务 (Docker @ 您的服务器)"
E[Express.js API 服务]
end
subgraph "第三方数据源"
F[视频源 API]
G[豆瓣 API]
end
C -->|API 请求| E
E -->|代理请求| F
E -->|代理请求| G
```
## 4. 分阶段实施计划
我们将迁移过程分为四个主要阶段,循序渐进,以确保每个环节都稳固可靠。
### 阶段一:后端服务搭建与部署 (Backend First)
**目标**: 优先保障数据接口的可用性,为后续所有前端工作提供数据基础。
- **任务 1**: 在项目根目录创建 `backend/` 文件夹,并初始化一个 Node.js (Express.js) 项目。
- **任务 2**: 将 `web/src/app/api/` 下的所有 API (search, detail, douban, login, playrecords) 的逻辑迁移到 Express 路由中。
- **任务 3**: 编写一个高效的 `Dockerfile`,用于构建后端服务的生产环境镜像。
- **任务 4**: 提供部署指南,说明如何在您的服务器上通过 Docker 启动服务,并配置必要的环境变量(如端口)。
- **交付物**: 可独立运行和测试的后端 API 服务。
### 阶段二TV 应用基础建设与数据层迁移
**目标**: 在 TV 应用中搭建好基础框架,并完成数据存储逻辑的替换。
- **任务 1**: 安装必要的依赖库:`@react-native-async-storage/async-storage` (用于本地存储) 和 `react-navigation` (用于页面路由)。
- **任务 2**: 在 TV 应用中创建 `services/api.ts` 文件,封装所有对新后端服务的 `fetch` 请求。
- **任务 3**: 在 TV 应用中创建 `services/storage.ts` 文件,使用 `AsyncStorage` 重新实现 `web/src/lib/db.client.ts` 中的所有功能(播放记录、收藏的增删改查)。
- **交付物**: 一个可以与后端通信并能在本地存取数据的 TV 应用骨架。
### 阶段三:核心 UI 组件库迁移
**目标**: 自底向上,将 Web 组件重构为适用于 TV 平台的原生组件。
- **任务 1**: 识别 `web/src/components` 中的核心可复用组件,如 `VideoCard``ScrollableRow``AggregateCard` 等。
- **任务 2**: 在 TV 项目的 `components/` 目录下,创建对应的 TV 版本组件。
- 将 HTML 标签 (`div`, `img`) 替换为 React Native 组件 (`View`, `Image`)。
- 将 CSS 样式转换为 React Native 的 `StyleSheet` API。
- **关键**: 为所有可交互组件添加 `onFocus`, `onBlur` 事件处理,并使用 `Touchable` 组件实现遥控器响应,确保良好的焦点管理和导航体验。
- **交付物**: 一套专为 TV 优化的、可复用的基础 UI 组件库。
### 阶段四:页面路由与功能整合
**目标**: 组装所有模块,将应用串联成一个完整、可用的产品。
- **任务 1**: 使用 `React Navigation` 库搭建 App 的整体路由结构,需要实现查看更多,详情页面,播放页等
- **任务 2**: 创建所有核心页面 (Screens),例如 `MoreScreen`, `SearchScreen`, `DetailScreen`, `PlayerScreen`
- **任务 3**: 在各个页面中,集成前几个阶段完成的 `services``components`,调用后端 API 获取数据,并渲染出最终界面。
- **任务 4**: 对整体应用进行联调测试,重点测试遥控器导航的流畅性和功能的完整性。
- **交付物**: 功能完整的 React Native TV 应用初版。
## 5. 技术栈清单
- **TV 应用**: React Native, TypeScript, React Navigation
- **后端服务**: Node.js, Express.js
- **数据存储**: @react-native-async-storage/async-storage
- **部署**: Docker
## 6. 风险与应对
- **风险**: 第三方 API 接口变更或失效。
- **应对**: 后端服务已将 API 请求集中处理,若有变更,只需修改后端代码,无需更新客户端 App。
- **风险**: TV 平台Android TV, tvOS的 UI/UX 兼容性差异。
- **应对**: 在开发过程中,优先使用 React Native 官方推荐的跨平台组件。对特定平台的差异,可以使用 `Platform.select()` 进行适配。
## 7. 下一步
我们已就此计划达成共识。下一步建议是:**切换到“代码”模式**,并开始着手执行**阶段一**的任务,即搭建和迁移独立的后端服务。