# 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