架构调整说明.md 3.1 KB

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 的依赖

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)
  • ✅ 通过回调函数 isLoggedInProviderrefreshTokenProvider 接收业务逻辑
  • ✅ 直接调用 SocketIORepositoryFactory.getInstance()(不使用反射)

2. AppInitializer(base-common)

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

关键变更:

  • ✅ 使用反射调用 capability-socketioSocketIOManager
  • ✅ 传递回调函数(登录状态检查、Token 刷新)
  • ✅ 如果 capability-socketio 未引入,跳过初始化(不影响应用运行)

3. 删除的文件

  • base-common/src/main/java/com/narutohuo/xindazhou/common/socketio/SocketIOManager.kt(已删除)

✅ 验证结果

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

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