当前位置: base-common/src/main/java/com/narutohuo/xindazhou/common/launch/AppInitializer.kt
问题: AppInitializer 是否应该放在 base-common 中?
AppInitializer 负责初始化:
base-core(基础设施层)
StorageImpl - 统一存储base-common(业务封装层)
ServerConfigManager - 配置管理器AuthManager - 认证管理器NetworkHelper - 网络管理器VersionUpdateManager - 版本更新管理器ApiServiceFactory - API 服务工厂能力层(capability-*)
SocketIOManager (capability-socketio) - SocketIO 管理器ShareServiceFactory (capability-share) - 分享服务第三方库
ARouter - 路由框架app(应用层)
↓ 依赖所有层
capability-*(能力层)
↓ 依赖 base-core
base-common(业务封装层)
↓ 依赖 base-core
base-core(基础设施层)
base-common 不应该知道能力层的存在AppInitializer 在 base-common 中,却需要初始化能力层base-common 是业务封装层,应该封装业务逻辑AppInitializer 是应用初始化逻辑,属于应用层职责base-common,可能不需要初始化所有模块base-common 中,强制所有使用者都使用这个初始化逻辑app 模块理由:
✅ 符合架构原则
app 模块依赖所有层,可以协调所有层的初始化app 模块是应用入口,负责组装各个模块✅ 职责清晰
base-common 专注于业务封装,不关心应用初始化✅ 灵活性高
✅ 依赖关系清晰
app 模块可以直接依赖所有层base-common/src/main/java/com/narutohuo/xindazhou/common/launch/AppInitializer.kt
↓ 移动到
app/src/main/java/com/narutohuo/xindazhou/launch/AppInitializer.kt
// 从
package com.narutohuo.xindazhou.common.launch
// 改为
package com.narutohuo.xindazhou.launch
// XinDaZhouApplication.kt
// 从
import com.narutohuo.xindazhou.common.launch.AppInitializer
// 改为
import com.narutohuo.xindazhou.launch.AppInitializer
base-common 的模块,可以直接导入,不需要反射app(应用层)
├─ AppInitializer(应用初始化)
├─ XinDaZhouApplication(Application 类)
└─ 直接依赖:
├─ base-common(业务封装层)
├─ capability-socketio(能力层,可选)
└─ capability-share(能力层,可选)
base-common(业务封装层)
└─ 只依赖 base-core
capability-*(能力层)
└─ 只依赖 base-core
AppInitializer 应该放在 app 模块中,而不是 base-common。
原因: