# KMM **Repository Path**: chenlione/kmm ## Basic Information - **Project Name**: KMM - **Description**: KMM跨平台 - **Primary Language**: Android - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-02 - **Last Updated**: 2026-03-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # KMM 组件化架构项目 ## 项目概述 这是一个基于 Kotlin Multiplatform Mobile (KMM) 的跨平台项目,采用 **Clean Architecture + 组件化** 架构设计,支持 Android 和 iOS 双平台。 ## 架构特点 ### ✨ Clean Architecture - **分层清晰**: Domain → Data → Presentation - **依赖倒置**: 高层不依赖低层,都依赖抽象 - **易于测试**: 每层可独立测试 ### 🧩 组件化架构 - **高复用性**: 核心组件可独立发布,多项目复用 - **低耦合**: 功能模块独立开发、测试、部署 - **易维护**: 组件边界清晰,职责单一 - **可扩展**: 新功能以独立模块形式添加 ## 技术栈 | 功能 | 库 | 版本 | |------|-----|------| | 网络请求 | Ktor | 3.1.1 | | 依赖注入 | Koin | 4.0.4 | | 路由导航 | Voyager | 1.0.0 | | 数据库 | SQLDelight | 2.0.2 | | 偏好存储 | DataStore | 1.1.4 | | 序列化 | Kotlinx Serialization | 1.8.0 | | 日志 | Napier | 2.7.1 | | 图片加载 | Coil | 3.1.0 | ## 组件化项目结构 ``` KMM/ ├── core/ # 核心基础组件层 │ ├── kmm-core/ # ⭐ 基础架构 (Result, Exception, UseCase) │ ├── kmm-network/ # 🌐 网络请求 (Ktor封装) │ ├── kmm-storage/ # 💾 数据存储 (DataStore) │ ├── kmm-database/ # 🗄️ 数据库 (SQLDelight) │ ├── kmm-logger/ # 📝 日志 (Napier) │ └── kmm-ui-base/ # 🎨 UI基础 (ScreenModel, UiState) ├── feature/ # 业务功能模块层 │ ├── feature-user/ # 👤 用户功能模块 │ └── feature-xxx/ # 其他功能模块 ├── composeApp/ # 📱 应用壳 (UI入口) ├── shared/ # 共享模块 (迁移中) └── iosApp/ # 🍎 iOS应用入口 ``` ## 组件依赖关系 ``` ┌─────────────────────────────────────────┐ │ composeApp (应用壳) │ ├─────────────────────────────────────────┤ │ feature-* (业务功能模块) │ │ feature-user, feature-auth, etc. │ ├─────────────────────────────────────────┤ │ kmm-ui-base (UI基础组件) │ ├─────────────────────────────────────────┤ │ kmm-network, kmm-storage, kmm-database │ │ (业务支撑组件) │ ├─────────────────────────────────────────┤ │ kmm-core, kmm-logger (基础组件) │ └─────────────────────────────────────────┘ ``` ## 快速开始 ### 1. 克隆项目 ```bash git clone cd KMM ``` ### 2. 构建运行 **Android**: ```bash .\gradlew.bat :composeApp:assembleDebug ``` **iOS**: 使用 Xcode 打开 iosApp 目录运行 ### 3. 使用核心组件 ```kotlin // 使用 Result 封装 val result: Result = userRepository.getUser(id) result.onSuccess { user -> println("User: ${user.name}") }.onError { exception -> println("Error: ${exception.message}") } // 使用网络组件 class UserApiService(client: HttpClient) : ApiService(client) { suspend fun getUsers(): Result> = get("/users") } // 使用存储组件 preferencesManager.putString("token", "abc123") val token: Flow = preferencesManager.getString("token") // 使用 ScreenModel class HomeScreenModel( private val repository: UserRepository ) : BaseScreenModel(HomeState()) { override fun onEvent(event: HomeEvent) { when (event) { is HomeEvent.LoadUsers -> loadUsers() } } } ``` ## 文档 ### 基础文档 - [01_网络请求.md](docs/01_网络请求.md) - 网络请求使用指南 - [02_数据存储.md](docs/02_数据存储.md) - 数据存储使用指南 - [03_路由导航.md](docs/03_路由导航.md) - 路由导航使用指南 - [04_依赖注入.md](docs/04_依赖注入.md) - 依赖注入使用指南 - [05_架构指南.md](docs/05_架构指南.md) - Clean Architecture架构指南 - [06_工具类.md](docs/06_工具类.md) - 工具类使用指南 - [07_常见问题.md](docs/07_常见问题.md) - 常见问题解答 ### 组件化文档 - [08_组件化架构指南.md](docs/08_组件化架构指南.md) - 组件化架构详细说明 - [09_组件化实施示例.md](docs/09_组件化实施示例.md) - 组件化实施代码示例 - [10_组件化快速开始.md](docs/10_组件化快速开始.md) - 组件化快速上手指南 ## 核心组件说明 ### kmm-core (基础架构组件) 提供 Result 统一结果封装、AppException 统一异常处理、UseCase 基类等基础架构能力。 **主要功能**: - Result 统一结果封装 - AppException 统一异常类 - UseCase/UseCaseWithParams 基类 - Flow/String 扩展函数 ### kmm-network (网络请求组件) 封装 Ktor 网络请求,提供统一的 API 调用接口。 **主要功能**: - HttpClientFactory (Ktor客户端工厂) - NetworkConfig (网络配置) - ApiService (API服务基类) - SafeApiCall (安全API调用) ### kmm-storage (数据存储组件) 提供键值对存储能力,基于 DataStore。 **主要功能**: - PreferencesManager (偏好设置管理器) - DataStoreFactory (DataStore工厂) - 跨平台实现 (Android/iOS) ### kmm-database (数据库组件) 提供 SQLDelight 数据库支持。 **主要功能**: - DatabaseDriverFactory (数据库驱动工厂) - 跨平台实现 (Android/iOS) ### kmm-logger (日志组件) 提供统一的日志接口,基于 Napier。 **主要功能**: - AppLogger (日志封装) - 支持 Debug/Info/Warning/Error 级别 ### kmm-ui-base (UI基础组件) 提供 UI 层基础架构。 **主要功能**: - BaseScreenModel (ScreenModel基类) - UiState (UI状态封装) - AppScreen (Screen接口) ## 功能模块说明 ### feature-user (用户功能模块) 用户相关的所有功能,包括用户列表、用户详情、添加/删除用户等。 **包含内容**: - Domain层: User模型、UserRepository接口、UseCase - Data层: UserRepositoryImpl、数据映射 - Presentation层: 用户相关页面和ViewModel ## 开发指南 ### 创建新功能模块 1. 创建模块目录 ```bash mkdir -p feature/feature-xxx/src/commonMain/kotlin ``` 2. 配置 build.gradle.kts ```kotlin dependencies { api(project(":core:kmm-core")) api(project(":core:kmm-network")) api(project(":core:kmm-ui-base")) } ``` 3. 实现 Domain/Data/Presentation 层 4. 配置 DI 模块 5. 在 settings.gradle.kts 中注册 6. 在 composeApp 中添加依赖 详细步骤请参考 [10_组件化快速开始.md](docs/10_组件化快速开始.md) ## 最佳实践 ### 1. 组件设计原则 - **单一职责**: 每个组件只负责一个明确的功能领域 - **依赖倒置**: 高层模块不依赖低层模块,都依赖抽象 - **接口隔离**: 组件对外暴露最小化的接口 - **开闭原则**: 对扩展开放,对修改关闭 ### 2. 代码规范 - 使用 Result 封装所有可能失败的操作 - 使用 Flow 处理数据流 - 使用 BaseScreenModel 管理 UI 状态 - 通过 DI 注入依赖,避免硬编码 - 添加日志便于调试 ### 3. 测试策略 - 核心组件必须有单元测试 - 功能模块需要集成测试 - UI 层需要 UI 测试 ## 项目特性 ✅ 完整的 Clean Architecture 架构 ✅ 组件化设计,高复用低耦合 ✅ 清晰的分层结构 ✅ 完善的基础设施封装 ✅ 统一的错误处理机制 ✅ 良好的依赖注入配置 ✅ 完整的文档支持 ✅ 跨平台支持 (Android/iOS) ✅ 现代化技术栈 ## 贡献指南 欢迎贡献代码!请遵循以下步骤: 1. Fork 项目 2. 创建功能分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 开启 Pull Request ## 许可证 本项目采用 MIT 许可证。 ## 联系方式 如有问题或建议,请提交 Issue。