数据同步模块架构说明
概述
数据同步模块已重构为模块化架构,每个同步功能都有独立的管理器,便于维护和调试。
文件结构
dataSync/
├── index.ts # 主入口文件,处理事件和UI协调
├── ui.ts # UI管理,负责界面显示和用户交互
├── api.ts # API客户端,处理与服务器的通信
├── types.ts # 类型定义
├── syncers/ # 同步管理器目录
│ ├── index.ts # 同步管理器工厂和统一接口
│ ├── viewedSync.ts # 已观看同步管理器
│ ├── wantSync.ts # 想看同步管理器
│ ├── actorSync.ts # 演员同步管理器
│ └── allSync.ts # 全部同步管理器(已观看+想看)
└── legacy/ # 旧版本代码(保留用于参考)
├── core.ts
├── api.ts
└── utils.ts核心组件
1. SyncManagerFactory (syncers/index.ts)
同步管理器工厂,提供统一的接口来管理所有同步类型:
typescript
// 获取特定类型的同步管理器
const manager = SyncManagerFactory.getSyncManager('viewed');
// 执行同步
const result = await SyncManagerFactory.executeSync('viewed', {
mode: 'incremental',
onProgress: (progress) => console.log(progress),
onComplete: (result) => console.log('完成', result),
onError: (error) => console.error('错误', error)
});
// 检查同步状态
const isSyncing = SyncManagerFactory.isSyncing('viewed');
const isAnySyncing = SyncManagerFactory.isAnySyncing();
// 取消同步
SyncManagerFactory.cancelSync('viewed');
SyncManagerFactory.cancelAllSync();2. 各个同步管理器
每个同步管理器都实现了 ISyncManager 接口:
typescript
interface ISyncManager {
isSyncing(): boolean;
sync(options?: SyncOptions): Promise<SyncResult>;
cancel(): void;
}ViewedSyncManager (已观看同步)
- 处理已观看视频的同步
- 支持全量和增量同步模式
- 提供详细的进度回调
WantSyncManager (想看同步)
- 处理想看视频的同步
- 支持全量和增量同步模式
- 提供详细的进度回调
ActorSyncManager (演员同步)
- 处理收藏演员的同步
- 调用现有的
actorSyncService - 映射进度格式到标准接口
AllSyncManager (全部同步)
- 组合已观看和想看同步
- 按顺序执行两个同步操作
- 合并进度和结果
3. UI管理器 (ui.ts)
负责所有UI相关的操作:
- 按钮状态管理
- 进度条显示
- 错误和成功消息
- 取消同步功能
4. API客户端 (api.ts)
处理与服务器的通信:
- 统一的API调用接口
- 错误处理和重试机制
- 进度回调支持
- 取消信号支持
使用方式
基本用法
typescript
import { SyncManagerFactory } from './syncers';
// 执行同步
try {
const result = await SyncManagerFactory.executeSync('viewed', {
mode: 'incremental',
onProgress: (progress) => {
console.log(`进度: ${progress.percentage}% - ${progress.message}`);
}
});
if (result.success) {
console.log(`同步成功: ${result.message}`);
}
} catch (error) {
console.error('同步失败:', error.message);
}事件驱动
主入口文件 index.ts 监听自定义事件:
typescript
// 触发同步
const event = new CustomEvent('sync-requested', {
detail: { type: 'viewed', mode: 'incremental' }
});
document.dispatchEvent(event);
// 取消同步
const cancelEvent = new CustomEvent('sync-cancel-requested');
document.dispatchEvent(cancelEvent);特性
1. 统一的进度显示
所有同步类型都有一致的进度条和取消功能。
2. 模块化设计
每个同步功能独立管理,便于维护和扩展。
3. 错误处理
统一的错误处理机制,包括网络错误、用户取消等。
4. 类型安全
完整的TypeScript类型定义,确保类型安全。
5. 可扩展性
新增同步类型只需要:
- 创建新的同步管理器
- 在工厂中注册
- 更新类型定义
迁移说明
从旧版本迁移到新架构:
移除旧的直接调用:
typescript// 旧方式 await actorSyncService.syncActors(); // 新方式 await SyncManagerFactory.executeSync('actors');统一事件处理: 所有同步都通过
sync-requested事件触发统一UI管理: 所有同步都使用相同的进度条和取消按钮
调试
每个同步管理器都有详细的日志输出:
typescript
// 启用调试日志
localStorage.setItem('debug', 'sync:*');
// 查看同步状态
console.log(SyncManagerFactory.isAnySyncing());
console.log(getSyncStatus());注意事项
- 向后兼容:旧的API调用仍然可用,但建议迁移到新架构
- 性能:新架构优化了内存使用和错误处理
- 扩展性:添加新的同步类型更加简单
- 维护性:每个功能独立,便于调试和修复