SuperAPI AI 工具集

android-data-layer

数据与分析

查看项目

更新于 10-16 00:20

技能介绍

用途:在 Android 或 KMP 项目中实现数据层。数据层负责协调多个数据源,其公开 API 是 Repository 接口,内部实现(DAO、API 服务、DTO)不向上层泄漏。该技能是错误传播模型与 KMP-Room 配置的规范来源,相关技能包括 android-retrofit(Retrofit 服务、OkHttp、Hilt 接线)与 android-dev(整体应用架构)。

主要能力:分层错误传播。目标是让数据层错误(IOException、HttpException、SQLiteException)永不抵达 ViewModel,在 Repository 边界映射为领域错误类型。若项目已有错误约定则沿用,否则可用 sealed DataError 层级作为默认。无领域层(简单 MVVM)时,Repository 直接返回 Result<T>,ViewModel 无需了解平台异常;有领域层时边界外移一层:数据源抛出平台异常,Repository 捕获并重映射为 DataError,UseCase 作为 Result 边界捕获 DataError 并返回 Result<T>,ViewModel 处理 Result 并映射为 UI 状态。Room 类型默认使用 Entity 后缀,若项目已有约定(如 Cached 前缀)则沿用。

KMP 中的 Room(commonMain):Room 自 2.7.0 起对 KMP 稳定。共享配置与纯 Android 有三处不同:@Database 上使用 @ConstructedBy(...) 并配合 expect object 由 Room 生成各平台 actual;使用 BundledSQLiteDriver(来自 androidx.sqlite:sqlite-bundled)在各平台固定同一 SQLite 版本;调用 setQueryCoroutineContext(Dispatchers.IO),Android Room 默认设置而 KMP 不会。各平台提供自己的 builder,Android 用 Room.databaseBuilder(context, AppDatabase::class.java, "app.db"),iOS/JVM 用 Room.databaseBuilder<AppDatabase>(databasePath = …)。KSP 需按目标接线(ksp(libs.androidx.room.compiler) 仅适用于 Android),例如 add("kspAndroid", libs.androidx.room.compiler)、add("kspIosArm64", …)、add("kspIosSimulatorArm64", …),每个目标一条;并用 room { schemaDirectory("$projectDir/schemas") } 导出 schema 以跟踪迁移历史。

适用场景与限制:适用于需要统一数据层错误处理、或数据层需放在 commonMain 的 Android/KMP 项目。纯 Android 项目可跳过 @ConstructedBy,直接调用 Room.databaseBuilder,Room 行为一致,KMP 配置仅在数据层必须位于 commonMain 时选用。资料未提供收费、价格或平台支持范围等更多信息。