# SocketIO 架构调整说明

## 📋 调整内容

### 调整前（方案1：分离）

```
base-common/socketio（业务层）
  └─ SocketIOManager（使用反射调用 capability-socketio）
      ↓ 反射调用
capability-socketio（能力层）
  └─ SocketIORepository（具体实现）
```

**问题：**
- ❌ 使用反射，性能差，类型不安全
- ❌ 代码分散在两个模块
- ❌ 违反依赖方向（业务层通过反射绕过依赖）

---

### 调整后（方案2：全部放在能力层）✅

```
capability-socketio（能力层）
  ├─ SocketIORepository（具体实现）
  └─ SocketIOManager（生命周期管理，直接调用 SocketIORepository）
      ↓ 回调函数
base-common（业务层）
  └─ AppInitializer（通过反射调用 SocketIOManager，传递回调函数）
```

**优势：**
- ✅ 代码集中在能力层
- ✅ 直接依赖，类型安全
- ✅ 符合依赖方向（能力层自包含）
- ✅ 无反射开销（能力层内部）

---

## 🔄 依赖关系

### 正确的依赖方向

```
base-common（业务层）
    ↓ 反射调用（可选）
capability-socketio（能力层）
    ↓ 直接依赖
base-core（基础设施层）
```

### capability-socketio 的依赖

```gradle
dependencies {
    // ✅ 只依赖 base-core（基础设施层）
    implementation(project(":base-core"))
    
    // ✅ AndroidX Lifecycle（用于 ProcessLifecycleOwner）
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")
    implementation("androidx.lifecycle:lifecycle-process:2.7.0")
    
    // ✅ SocketIO 客户端库
    implementation("io.socket:socket.io-client:2.1.2")
}
```

**关键点：**
- ✅ capability-socketio **不依赖** base-common
- ✅ SocketIOManager 使用 `ILog`（base-core）而不是 `LogHelper`（base-common）
- ✅ SocketIOManager 通过回调函数接收登录状态和 Token 刷新逻辑

---

## 📝 代码变更

### 1. SocketIOManager（移到 capability-socketio）

**位置：** `capability-socketio/src/main/java/com/narutohuo/xindazhou/socketio/manager/SocketIOManager.kt`

**关键变更：**
- ✅ 使用 `ILog`（base-core）而不是 `LogHelper`（base-common）
- ✅ 通过回调函数 `isLoggedInProvider` 和 `refreshTokenProvider` 接收业务逻辑
- ✅ 直接调用 `SocketIORepositoryFactory.getInstance()`（不使用反射）

### 2. AppInitializer（base-common）

**位置：** `base-common/src/main/java/com/narutohuo/xindazhou/common/launch/AppInitializer.kt`

**关键变更：**
- ✅ 使用反射调用 `capability-socketio` 的 `SocketIOManager`
- ✅ 传递回调函数（登录状态检查、Token 刷新）
- ✅ 如果 `capability-socketio` 未引入，跳过初始化（不影响应用运行）

### 3. 删除的文件

- ❌ `base-common/src/main/java/com/narutohuo/xindazhou/common/socketio/SocketIOManager.kt`（已删除）

---

## ✅ 验证结果

- ✅ 编译通过
- ✅ 依赖关系正确（能力层不依赖业务层）
- ✅ 代码集中在能力层
- ✅ 类型安全（能力层内部直接调用）

---

**文档版本：** v1.0  
**创建时间：** 2024-12

