# 架构修复方案文档

## 1. 重构目标

### 1.1 核心原则
- **单一职责**：每个模块只负责一个明确的功能
- **依赖倒置**：高层模块不依赖低层模块，都依赖抽象
- **开闭原则**：对扩展开放，对修改关闭

### 1.2 目标架构
```
src/
├── core/                    # 核心业务逻辑（框架无关）
│   ├── entities/           # 业务实体
│   ├── repositories/       # 仓库接口
│   └── usecases/          # 业务用例
├── data/                   # 数据层
│   ├── datasources/       # 数据源实现（API、DB、Cache）
│   ├── repositories/      # 仓库实现
│   └── mappers/          # 数据映射
├── presentation/          # 表现层
│   ├── components/       # UI组件
│   ├── screens/         # 屏幕组件
│   ├── stores/          # 状态管理
│   └── hooks/           # 自定义hooks
└── infrastructure/      # 基础设施
    ├── navigation/      # 导航
    ├── theme/          # 主题
    └── services/       # 外部服务
```

## 2. 具体修复方案

### 2.1 messageManager.ts 重构方案

#### 现状问题
- 1500+行，上帝对象
- 混合了 WebSocket、数据库、状态管理、UI通知
- 与SQLite深度耦合

#### 目标结构
```
src/data/
├── datasources/
│   ├── WebSocketClient.ts      # WebSocket连接管理
│   └── MessageDataSource.ts    # 消息数据源
├── repositories/
│   └── MessageRepository.ts    # 消息仓库实现
└── mappers/
    └── MessageMapper.ts        # 消息数据映射

src/core/
├── entities/
│   └── Message.ts              # 消息实体
├── repositories/
│   └── IMessageRepository.ts   # 仓库接口
└── usecases/
    ├── ProcessMessageUseCase.ts
    ├── SyncMessagesUseCase.ts
    └── UpdateReadReceiptUseCase.ts

src/presentation/stores/
└── messageStore.ts             # 简化的消息状态管理
```

#### 重构步骤
1. 提取 WebSocketClient - 纯连接管理
2. 创建 MessageRepository - 数据访问抽象
3. 创建 UseCases - 业务逻辑
4. 重写 messageStore - 仅负责UI状态
5. 删除旧的 messageManager.ts

### 2.2 乐观更新工具函数方案

#### 现状问题
- userStore.ts 中重复6+次相同模式
- 代码冗余，难以维护

#### 目标API
```typescript
// utils/optimisticUpdate.ts
export interface OptimisticUpdateOptions<T, R> {
  store: StoreApi<any>;
  getCurrentState: () => T;
  optimisticUpdate: (current: T) => T;
  apiCall: () => Promise<R>;
  onSuccess?: (result: R, current: T) => T;
  onError?: (error: any, original: T) => void;
}

export async function optimisticUpdate<T, R>(
  options: OptimisticUpdateOptions<T, R>
): Promise<R>
```

#### 使用示例
```typescript
// 重构前（重复代码）
set(state => ({ posts: updatedPosts }));
try {
  const result = await postService.like(postId);
  // ...
} catch (error) {
  set(state => ({ posts: originalPosts }));
}

// 重构后（简洁）
await optimisticUpdate({
  store,
  getCurrentState: () => store.getState().posts,
  optimisticUpdate: (posts) => updatePostLikes(posts, postId, true),
  apiCall: () => postService.like(postId),
  onSuccess: (result, posts) => updatePostWithServerData(posts, result),
});
```

### 2.3 useResponsive.ts 拆分方案

#### 现状问题
- 485行，43个导出
- 功能混杂：断点检测、响应式值计算、平台检测

#### 目标结构
```
src/presentation/hooks/responsive/
├── useBreakpoint.ts           # 断点检测
├── useResponsiveValue.ts      # 响应式值映射
├── useOrientation.ts          # 方向检测
├── usePlatform.ts            # 平台检测
├── useScreenSize.ts          # 屏幕尺寸
└── index.ts                  # 统一导出
```

#### 各Hook职责
- `useBreakpoint`: 返回当前断点 (mobile/tablet/desktop/wide)
- `useResponsiveValue`: 根据断点返回不同值
- `useOrientation`: 返回 portrait/landscape
- `usePlatform`: 返回 ios/android/web
- `useScreenSize`: 返回 width/height

### 2.4 MainNavigator 解耦方案

#### 现状问题
- 1118行，直接依赖store
- 混合了导航配置和业务逻辑

#### 目标结构
```
src/infrastructure/navigation/
├── MainNavigator.tsx         # 简化后的导航器
├── AuthNavigator.tsx         # 认证导航
├── TabNavigator.tsx          # 标签导航
├── navigationService.ts      # 导航服务（解耦层）
├── navigationTypes.ts        # 类型定义
└── hooks/
    └── useNavigationState.ts # 导航状态hook
```

#### 解耦策略
1. 创建 NavigationService - 提供导航操作的抽象
2. Store通过NavigationService触发导航，而非直接操作
3. MainNavigator只负责渲染，不处理业务逻辑

### 2.5 Repository 层创建方案

#### 现状问题
- 服务层直接操作数据库
- 没有明确的数据访问边界

#### 目标结构
```
src/data/repositories/
├── MessageRepository.ts      # 消息数据访问
├── PostRepository.ts        # 帖子数据访问
├── UserRepository.ts        # 用户数据访问
└── interfaces/
    ├── IMessageRepository.ts
    ├── IPostRepository.ts
    └── IUserRepository.ts
```

#### 职责划分
- **Repository**: 数据访问抽象，定义接口
- **DataSource**: 具体数据源实现（API、SQLite、Cache）
- **Service**: 业务逻辑编排，使用Repository

## 3. 实施计划

### 阶段1：基础设施（第1-2天）
- [ ] 创建目录结构
- [ ] 实现乐观更新工具函数
- [ ] 拆分 useResponsive hooks

### 阶段2：数据层重构（第3-5天）
- [ ] 创建 Repository 接口和实现
- [ ] 创建 DataSource 层
- [ ] 迁移数据库操作到 Repository

### 阶段3：核心业务重构（第6-10天）
- [ ] 重构 messageManager → UseCases + Store
- [ ] 创建 WebSocketClient
- [ ] 实现消息同步逻辑

### 阶段4：表现层重构（第11-12天）
- [ ] 解耦 MainNavigator
- [ ] 重构 userStore 使用乐观更新工具
- [ ] 更新所有屏幕组件

### 阶段5：测试与优化（第13-14天）
- [ ] 单元测试
- [ ] 集成测试
- [ ] 性能优化

## 4. 风险与应对

| 风险 | 影响 | 应对措施 |
|-----|------|---------|
| 重构引入bug | 高 | 每个模块重构后必须测试，保持API兼容 |
| 开发时间超期 | 中 | 分阶段交付，优先核心功能 |
| 团队成员不熟悉新架构 | 中 | 编写详细文档，代码审查 |
| 性能下降 | 低 | 添加性能监控，及时优化 |

## 5. 验收标准

- [ ] messageManager.ts 被删除，功能拆分到多个小模块
- [ ] userStore.ts 中无重复乐观更新代码
- [ ] useResponsive.ts 拆分为5+个专注hook
- [ ] MainNavigator.tsx 行数 < 300
- [ ] 所有单元测试通过
- [ ] 无TypeScript错误
- [ ] 性能不劣化（启动时间、内存占用）
