SuperAPI AI 工具集

android-clean-architecture

编程与开发

查看项目

更新于 10-15 10:36

技能介绍

用途

该技能面向 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 项目,尤其是中大型项目或需要跨平台共享领域与数据逻辑的场景。

限制

资料未提供该技能的安装命令、收费方式、平台支持范围或效果保证等信息。