# base-core 与 base-common 整体架构说明

## 📋 架构概述

```
业务层（app 模块）
    ↓ 依赖
    ├── base-common（业务封装层）
    └── capability-xxx（能力层）
            ↓ 依赖
        base-core（基础设施层）
            ↑ 依赖
        base-common（业务封装层）
```

### 依赖关系

- ✅ **业务层（app 模块）依赖 base-common 和 capability-xxx**
- ✅ **能力层（capability 模块）依赖 base-core**（直接依赖，不通过 base-common）
- ✅ **base-common 依赖 base-core**

**注意：** capability 模块应该直接依赖 base-core，而不是通过 base-common。虽然当前实现中 capability 依赖 base-common（base-common 会传递 base-core），但更合理的做法是直接依赖 base-core。

### 使用原则

- ✅ **能力层（capability 模块）可以调用 base-core**
- ✅ **业务层（app 模块）可以调用 base-common 和 capability-xxx**
- ❌ **业务层不直接调用 base-core**（通过 base-common 间接使用）

---

## 🏗️ 整体代码结构

### base-core（基础设施层）

```
xdz_android/base-core/
├── src/main/java/com/narutohuo/xindazhou/core/
│   ├── log/
│   │   ├── ILog.kt                       ✅ 日志接口定义
│   │   └── impl/
│   │       ├── TimberLog.kt              ✅ Timber 日志实现（基于 Timber 库）
│   │       └── NoOpLog.kt                ✅ 空日志实现（生产环境使用）
│   ├── network/
│   │   └── NetworkManager.kt             ✅ Retrofit/OkHttp 管理器（单例模式）
│   ├── push/
│   │   └── IPushService.kt               ✅ 推送服务接口
│   ├── share/
│   │   ├── IShareService.kt              ✅ 分享服务接口
│   │   └── IShareCallback.kt             ✅ 分享回调接口
│   ├── storage/
│   │   └── IStorage.kt                   ✅ 存储服务接口（键值存储、文件存储、数据库存储）
│   └── util/
│       └── IUtil.kt                       ✅ 工具类接口（时间处理、字符串处理、加密解密）
└── build.gradle                           ✅ 第三方库管理（Retrofit, OkHttp, Gson, Glide, Coroutines, ARouter, Timber）
```

---

### base-common（业务封装层）

```
xdz_android/base-common/
├── src/main/java/com/narutohuo/xindazhou/common/
│   ├── bridge/
│   │   └── BridgeManager.kt              ✅ H5通信、模块间通信封装（直接实现，无需接口）
│   ├── config/
│   │   ├── ConfigManager.kt               ✅ 配置管理封装（直接使用 SharedPreferences，无需接口）
│   │   └── ServerConfigManager.kt         ✅ 服务器配置管理（开发测试时配置服务器地址）
│   ├── executor/
│   │   └── ExecutorManager.kt             ✅ 异步任务执行封装（直接使用协程，无需接口）
│   ├── storage/
│   │   └── StorageManager.kt              ✅ 封装 IStorage，提供存储管理的便捷方法
│   ├── util/
│   │   └── UtilManager.kt                 ✅ 封装 IUtil，提供工具方法的便捷调用
│   ├── network/
│   │   ├── ApiServiceFactory.kt           ✅ API 服务工厂，统一创建 API 服务实例
│   │   ├── ApiBaseRemoteDataSource.kt     ✅ 远程数据源基类，封装通用网络请求逻辑
│   │   ├── ApiBaseRepository.kt           ✅ Repository 基类，提供通用错误处理和数据转换
│   │   └── ApiResponseParser.kt           ✅ 响应解析器，解析 Retrofit Response
│   ├── ui/
│   │   ├── BaseActivity.kt                ✅ Activity 基类，支持 ViewBinding、加载状态管理、权限请求、屏幕方向
│   │   ├── BaseFragment.kt                ✅ Fragment 基类，支持 ViewBinding、加载状态管理
│   │   ├── ActivityManager.kt              ✅ Activity 栈管理，统一管理所有 Activity 生命周期
│   │   ├── ActivityExtensions.kt          ✅ Activity 扩展函数，简化 StateFlow 观察
│   │   ├── FragmentExtensions.kt           ✅ Fragment 扩展函数，简化 StateFlow 观察
│   │   ├── MessageHelper.kt               ✅ Toast/Snackbar 统一封装，提供便捷的消息提示
│   │   └── StatusBarHelper.kt             ✅ 状态栏/导航栏管理，沉浸式状态栏支持
│   ├── image/
│   │   └── ImageLoader.kt                 ✅ 图片加载封装（Glide），支持圆形、圆角、占位图
│   ├── dialog/
│   │   ├── DialogHelper.kt                ✅ 对话框统一封装，iOS 风格确认/提示对话框
│   │   └── CascadePickerDialog.kt         ✅ 级联选择器对话框
│   ├── file/
│   │   └── FilePickerHelper.kt            ✅ 文件选择器封装，支持图片、文件、多文件选择
│   ├── camera/
│   │   └── CameraHelper.kt                ✅ 相机/相册封装，支持拍照、相册选择、图片裁剪
│   ├── router/
│   │   └── RouterHelper.kt                ✅ ARouter 路由封装，统一路由跳转、参数传递
│   ├── permission/
│   │   └── PermissionHelper.kt             ✅ 权限管理封装，权限检查、请求、说明对话框
│   ├── crash/
│   │   └── CrashHelper.kt                  ✅ 崩溃收集封装，自动捕获崩溃并记录日志
│   ├── auth/
│   │   ├── AuthManager.kt                 ✅ 认证管理器，封装登录、注册、Token 刷新逻辑
│   │   ├── LoginActivity.kt                ✅ 登录页 Activity（完整封装，可直接使用）
│   │   ├── RegisterActivity.kt             ✅ 注册页 Activity（完整封装，可直接使用）
│   │   ├── ui/
│   │   │   ├── LoginFragment.kt            ✅ 登录 Fragment（完整 UI 和逻辑）
│   │   │   └── RegisterFragment.kt         ✅ 注册 Fragment（完整 UI 和逻辑）
│   │   ├── model/
│   │   │   ├── LoginRequest.kt             ✅ 登录请求参数
│   │   │   ├── LoginResponse.kt            ✅ 登录响应数据
│   │   │   └── RegisterRequest.kt          ✅ 注册请求参数
│   │   ├── datasource/
│   │   │   ├── remote/
│   │   │   │   ├── AuthApi.kt              ✅ 认证 API 接口
│   │   │   │   └── AuthRemoteDataSource.kt ✅ 认证远程数据源
│   │   │   └── local/
│   │   │       └── AuthLocalDataSource.kt ✅ 认证本地数据源接口（需业务模块实现）
│   │   └── repository/
│   │       └── AuthRepository.kt          ✅ 认证数据仓库
│   ├── version/
│   │   ├── VersionUpdateManager.kt        ✅ 版本更新管理器，封装版本检查、更新对话框、强制更新
│   │   ├── VersionCheckActivity.kt        ✅ 版本检查 Activity（通用）
│   │   ├── ui/
│   │   │   └── UpdateDialogFragment.kt    ✅ 版本更新对话框 Fragment
│   │   ├── model/
│   │   │   └── VersionInfo.kt             ✅ 版本信息数据模型
│   │   ├── datasource/
│   │   │   └── remote/
│   │   │       └── VersionApi.kt           ✅ 版本 API 接口
│   │   └── repository/
│   │       └── VersionRepository.kt       ✅ 版本数据仓库
│   └── launch/
│       ├── LaunchActivity.kt               ✅ 启动页 Activity（通用，处理登录状态判断和跳转）
│       └── AppLaunchManager.kt             ✅ 应用启动管理器，统一处理启动逻辑
└── build.gradle                            ✅ 依赖 base-core
```

---

### capability-xxx（能力层）

```
xdz_android/capability-push/
├── src/main/java/com/narutohuo/xindazhou/push/
│   ├── api/
│   │   └── PushService.kt                 ✅ 推送服务接口（模块内部）
│   ├── factory/
│   │   └── PushServiceFactory.kt          ✅ 推送服务工厂
│   ├── impl/
│   │   └── PushServiceImpl.kt             ✅ 实现 IPushService（base-core 定义）
│   └── ...
└── build.gradle                            ✅ 直接依赖 base-core

xdz_android/capability-share/
├── src/main/java/com/narutohuo/xindazhou/share/
│   ├── impl/
│   │   └── ShareServiceImpl.kt            ✅ 实现 IShareService（base-core 定义）
│   └── ...
└── build.gradle                            ✅ 直接依赖 base-core

xdz_android/capability-ble/
└── build.gradle                            ✅ 直接依赖 base-core

xdz_android/capability-nfc/
└── build.gradle                            ✅ 直接依赖 base-core

xdz_android/capability-qrcode/
└── build.gradle                            ✅ 直接依赖 base-core

xdz_android/capability-socketio/
└── build.gradle                            ✅ 直接依赖 base-core
```

---

### app（业务层）

```
xdz_android/app/
├── src/main/java/com/narutohuo/xindazhou/
│   ├── XinDaZhouApplication.kt             ✅ Application 类，初始化 AuthManager、VersionUpdateManager
│   ├── MainActivity.kt                     ✅ 主界面 Activity
│   ├── user/
│   │   ├── datasource/
│   │   │   └── local/
│   │   │       └── AuthLocalDataSourceImpl.kt ✅ 实现 AuthLocalDataSource（使用 TokenManager）
│   │   └── ...
│   └── ...
└── build.gradle                             ✅ 依赖 base-common 和 capability-xxx
```

**注意：** 
- ✅ 认证功能已完全封装在 base-common 中，app 模块只需实现 `AuthLocalDataSource`（因为 TokenManager 在 app 模块）
- ✅ 版本管理功能已完全封装在 base-common 中，app 模块只需在 Application 中调用 `VersionUpdateManager.init()`
- ✅ 登录/注册界面已完全封装在 base-common 中，app 模块可直接使用 `LoginActivity` 和 `RegisterActivity`

---

## 💡 核心作用

### base-core 的作用

1. **定义接口**：让 capability 模块实现（如 IPushService、IShareService）
2. **提供基础能力**：ILog、NetworkManager 等，让所有模块统一使用
3. **管理第三方库**：统一版本，避免冲突

### base-common 的作用

1. **封装 base-core 的接口**：提供便捷的调用方式（StorageManager、UtilManager）
2. **业务工具封装**：
   - BridgeManager：H5通信、模块间通信（直接实现）
   - ConfigManager：配置管理（直接使用 SharedPreferences）
   - ExecutorManager：异步任务执行（直接使用协程）
   - ServerConfigManager：服务器配置管理（开发测试时使用）
3. **MVVM 网络封装**：简化网络请求（ApiServiceFactory、ApiBaseRemoteDataSource、ApiBaseRepository）
4. **UI 基础类**：简化 UI 开发（BaseActivity、BaseFragment、ActivityManager、扩展函数）
5. **UI 工具封装**：
   - ImageLoader：图片加载统一封装
   - MessageHelper：Toast/Snackbar 统一封装
   - DialogHelper：iOS 风格对话框统一封装
   - CascadePickerDialog：级联选择器对话框
   - StatusBarHelper：状态栏/导航栏管理
6. **功能封装**：
   - FilePickerHelper：文件选择器封装
   - CameraHelper：相机/相册封装
   - RouterHelper：ARouter 路由封装
   - PermissionHelper：权限管理封装
   - CrashHelper：崩溃收集封装
7. **业务功能完整封装**：
   - **认证模块（auth）**：完整的登录/注册功能，包括 UI、业务逻辑、数据层
     - LoginActivity/RegisterActivity：可直接使用的 Activity
     - LoginFragment/RegisterFragment：完整的 UI 和逻辑
     - AuthManager：认证管理器，统一管理登录、注册、Token 刷新
     - AuthRepository：认证数据仓库，MVVM 架构
   - **版本管理模块（version）**：完整的版本检查更新功能
     - VersionUpdateManager：版本更新管理器，封装版本检查、更新对话框、强制更新
     - VersionCheckActivity：版本检查 Activity（通用）
     - UpdateDialogFragment：版本更新对话框
   - **启动管理（launch）**：应用启动逻辑封装
     - LaunchActivity：启动页 Activity（通用）
     - AppLaunchManager：应用启动管理器，统一处理登录状态判断和跳转

---

## ⚠️ 注意事项

### 1. 依赖关系

- ✅ **业务层（app 模块）依赖 base-common 和 capability-xxx**
- ✅ **能力层（capability 模块）依赖 base-core**（直接依赖，不通过 base-common）
- ✅ **base-common 依赖 base-core**

**说明：** 
- ✅ capability 模块只需要 base-core 的接口和基础能力（ILog、NetworkManager），不需要 base-common 的业务封装
- ✅ 已优化：所有 capability 模块现在都直接依赖 base-core，不再通过 base-common

### 2. 接口实现

- ✅ base-core 定义接口（IPushService、IShareService 等能力接口）
- ✅ app 模块实现接口（通过 ARouter 注册）
- ✅ capability 模块实现接口（IPushService、IShareService 等）

### 3. 初始化顺序

1. ARouter 初始化
2. 注册接口实现
3. NetworkManager 初始化
4. ApiServiceFactory 初始化（设置 baseUrlProvider）
5. AuthManager 初始化（传入 AuthLocalDataSource 实现）
6. VersionUpdateManager 初始化

### 4. 使用原则

- ✅ 能力层使用 base-core 的接口和基础能力
- ✅ 业务层使用 base-common 的封装
- ❌ 业务层不直接使用 base-core

### 5. 业务功能使用示例

#### 认证功能使用

```kotlin
// 1. 在 Application 中初始化
val localDataSource = object : AuthLocalDataSource {
    override suspend fun saveToken(loginResponse: LoginResponse) {
        TokenManager.saveToken(...)
    }
    // ...
}
AuthManager.init(localDataSource)

// 2. 启动登录页
val intent = Intent(context, LoginActivity::class.java).apply {
    putExtra(LoginActivity.EXTRA_MAIN_ACTIVITY_CLASS, MainActivity::class.java.name)
}
startActivity(intent)
```

#### 版本管理使用

```kotlin
// 1. 在 Application 中初始化
VersionUpdateManager.init(context)

// 2. 在 Activity 中检查更新
VersionUpdateManager.checkUpdate(activity)
```

#### 启动管理使用

```kotlin
// 在 LaunchActivity 中使用
AppLaunchManager.handleLaunch(
    activity = this,
    isLoggedIn = { TokenManager.getAccessToken() != null },
    mainActivityClass = MainActivity::class.java,
    loginActivityClass = LoginActivity::class.java
)
```

---

## 📚 相关文档

- [base-core README](./base-core/README.md)
- [base-common README](./base-common/README.md)
- [网络请求 MVVM 封装方案](./base-common/src/main/java/com/narutohuo/xindazhou/common/network/网络请求MVVM封装方案.md)
- [UI 层封装方案](./base-common/src/main/java/com/narutohuo/xindazhou/common/ui/UI层封装方案.md)
- [封装功能使用说明](./base-common/src/main/java/com/narutohuo/xindazhou/common/封装功能使用说明.md)
- [待封装功能分析](./base-common/src/main/java/com/narutohuo/xindazhou/common/base-common待封装功能分析.md)

