用途
该技能面向 Android 与 Kotlin Multiplatform(KMP)项目,提供 Clean Architecture 的架构模式与代码组织方式,帮助开发者建立清晰的分层结构、依赖规则和数据流设计。
主要能力
模块结构
推荐的项目布局:
project/
├── app/ # Android 入口点、DI 装配、Application 类
├── core/ # 共享工具、基类、错误类型
├── domain/ # UseCase、领域模型、Repository 接口(纯 Kotlin)
├── data/ # Repository 实现、DataSource、数据库、网络
├── presentation/ # 屏幕、ViewModel、UI 模型、导航
├── design-system/ # 可复用 Compose 组件、主题、排版
└── feature/ # 功能模块(可选,用于较大项目)
├── auth/
├── settings/
└── profile/
依赖规则
app → presentation, domain, data, core
presentation → domain, design-system, core
data → domain, core
domain → core(或无依赖)
core → (无依赖)
关键约束:domain 层绝不能依赖 data、presentation 或任何框架,只包含纯 Kotlin 代码。
领域层
- UseCase 模式:每个 UseCase 代表一个业务操作,使用
operator fun invoke提供简洁调用点,支持挂起函数与基于 Flow 的响应式流。 - 领域模型:普通 Kotlin data class,不带框架注解。
- Repository 接口:在 domain 中定义,在 data 中实现。
数据层
- Repository 实现:协调本地与远程数据源。
- Mapper 模式:以扩展函数形式放在数据模型附近,完成 Entity/DTO 与领域模型之间的转换。
- Room 数据库(Android):提供
@Entity、@Dao示例,含查询、Upsert 与 Flow 观察。 - SQLDelight(KMP):提供建表、查询、Upsert 的
.sq文件示例。 - Ktor 网络客户端(KMP):提供 RemoteDataSource 与 HttpClient 配置示例,含内容协商与日志。
依赖注入
- Koin(KMP 友好):按 domain、data、presentation 模块分别声明。
- Hilt(仅 Android):提供
@Module、@Binds与@HiltViewModel示例。
错误处理
提供 Result<T> 或自定义 sealed 类型(如 Try 与 AppError)进行错误传播,并在 ViewModel 中映射为 UI 状态。
Gradle 约定插件
针对 KMP 项目,使用约定插件减少构建文件重复,示例包含 kmp-library.gradle.kts 的配置方式。
反模式清单
- 在 domain 中导入 Android 框架类。
- 向 UI 层暴露数据库实体或 DTO。
- 在 ViewModel 中放置业务逻辑。
- 使用 GlobalScope 或非结构化协程。
- 臃肿的 Repository 实现。
- 模块间循环依赖。
使用方式
该技能在以下场景激活:搭建 Android 或 KMP 项目模块结构;实现 UseCase、Repository 或 DataSource;设计 domain、data、presentation 之间的数据流;使用 Koin 或 Hilt 配置依赖注入;在分层架构中使用 Room、SQLDelight 或 Ktor。
适用场景
适用于需要清晰分层、可测试、可维护的 Android 与 KMP 项目,尤其是中大型项目或需要跨平台共享领域与数据逻辑的场景。
限制
资料未提供该技能的安装命令、收费方式、平台支持范围或效果保证等信息。