Appearance
android-clean-architecture Skill 是 Everything Claude Code 针对 Android 与 KMP 项目分层架构的核心能力,覆盖模块结构、依赖反转、UseCase/Repository 模式、数据层设计(Room、SQLDelight、Ktor)、依赖注入(Koin/Hilt)等关键环节。它解决了传统 Android 项目中业务逻辑分散、依赖混乱、可测试性差等痛点,帮助开发者用 AI 快速生成、审查并重构生产级 Clean Architecture 工程骨架,极大提升跨平台代码质量和协作效率。
Everything Claude Code Android Clean Architecture:KMP 模块结构、依赖规则、UseCase 与 Repository 模式
在 AI 编程助手(如 Claude Code、Codex、Cursor)辅助下构建 Android 或 Kotlin Multiplatform (KMP) 项目时,如何系统性落地 Clean Architecture?android-clean-architecture Skill 正是为此而生。它内置于 Everything Claude Code 插件体系,结合 Skills、Agents、Hooks、Rules 的方法论,让你从项目初始化、分层设计、依赖注入到数据流转全流程自动化、标准化,避免传统项目中常见的“业务逻辑散落各层、数据层耦合 UI、模块依赖混乱”等问题。
本指南将带你从 Skill 触发场景、模块结构、依赖规则、UseCase/Repository 实现到数据层与依赖注入配置,逐步掌握如何用好这一 Skill,并介绍常见配套 Agent 及与其他 Skill 的协作关系。
1. 适用场景与触发条件
android-clean-architecture Skill 会在以下场景自动激活:
- 新建或重构 Android/KMP 项目时,需要明确分层和模块边界
- 设计 UseCase、Repository、DataSource 等业务与数据分离模式
- 需要 Room/SQLDelight/Ktor 等多数据源整合的标准实现
- 配置依赖注入(Koin、Hilt),保证依赖流向合理
- 希望提升可测试性、可维护性、跨平台代码复用能力
对比未使用该 Skill 的常见问题:
- 业务逻辑写在 ViewModel、Activity,难以复用和测试
- 数据层(如 Room/网络 DTO)直接暴露给 UI,导致类型污染
- 模块间循环依赖,难以解耦和扩展
- 缺乏统一的错误处理和依赖注入规范
2. 推荐模块结构与依赖规则
Skill 会建议并自动生成如下分层结构(适用于 Android 与 KMP 工程):
project/
├── app/ # Android 入口,DI 配置,Application 类
├── core/ # 通用工具、基础类、错误类型
├── domain/ # UseCase、领域模型、仓库接口(纯 Kotlin,无依赖)
├── data/ # 仓库实现、数据源、DB、网络
├── presentation/ # 屏幕、ViewModel、UI 模型、导航
├── design-system/ # 复用 Compose 组件、主题
└── feature/ # 可选,按功能拆分的子模块依赖流向(强约束):
app → presentation, domain, data, core
presentation → domain, design-system, core
data → domain, core
domain → core (或无依赖)
core → (无依赖)关键点:
domain层绝不能依赖data、presentation或任何框架,保证纯 Kotlin、可移植、可测试。
3. UseCase 与 Repository 模式落地
Step 1:在 domain 层定义 UseCase 与 Repository 接口
kotlin
// UseCase 示例
class GetItemsByCategoryUseCase(
private val repository: ItemRepository
) {
suspend operator fun invoke(category: String): Result<List<Item>> =
repository.getItemsByCategory(category)
}
// Repository 接口
interface ItemRepository {
suspend fun getItemsByCategory(category: String): Result<List<Item>>
suspend fun saveItem(item: Item): Result<Unit>
fun observeItems(): Flow<List<Item>>
}- UseCase 只依赖 Repository 接口,业务操作单一职责,便于测试与复用
- 领域模型为纯 data class,无任何 Android/框架注解
Step 2:在 data 层实现 Repository,协调本地与远程数据源
kotlin
class ItemRepositoryImpl(
private val localDataSource: ItemLocalDataSource,
private val remoteDataSource: ItemRemoteDataSource
) : ItemRepository {
override suspend fun getItemsByCategory(category: String): Result<List<Item>> {
return runCatching {
val remote = remoteDataSource.fetchItems(category)
localDataSource.insertItems(remote.map { it.toEntity() })
localDataSource.getItemsByCategory(category).map { it.toDomain() }
}
}
// ... 其他方法
}- 数据层只依赖 domain,不反向依赖
- Mapper(DTO/Entity ↔ Domain)作为扩展函数靠近数据模型定义,保证类型隔离
Step 3:数据层实现(Room/SQLDelight/Ktor)
- Room(Android):定义 Entity/Dao,数据操作全部封装
- SQLDelight(KMP):声明 SQL,自动生成类型安全接口
- Ktor(KMP 网络):统一网络访问,支持多平台
kotlin
// Room Entity 示例
@Entity(tableName = "items")
data class ItemEntity(
@PrimaryKey val id: String,
val title: String,
// ...
)sql
-- SQLDelight 示例
CREATE TABLE ItemEntity (
id TEXT NOT NULL PRIMARY KEY,
-- ...
);4. 依赖注入配置(Koin/Hilt)
Koin(KMP 跨平台推荐)
kotlin
val domainModule = module {
factory { GetItemsByCategoryUseCase(get()) }
}
val dataModule = module {
single<ItemRepository> { ItemRepositoryImpl(get(), get()) }
}Hilt(Android-only)
kotlin
@Module
@InstallIn(SingletonComponent::class)
abstract class RepositoryModule {
@Binds
abstract fun bindItemRepository(impl: ItemRepositoryImpl): ItemRepository
}Skill 会自动生成/补全 DI 配置,确保依赖流向不被破坏。
5. 错误处理与协作模式
- 推荐用
Result<T>或自定义 sealed 类型(如 Try/AppError)贯穿 domain→presentation,UI 层统一映射为 UI 状态 - ViewModel 仅负责状态管理与 UI 交互,业务逻辑全部通过 UseCase 调用
kotlin
viewModelScope.launch {
when (val result = getItems(category)) {
is Try.Success -> _state.update { it.copy(items = result.value) }
is Try.Failure -> _state.update { it.copy(error = result.error.toMessage()) }
}
}6. Skill 输出示例
AI 生成的项目结构/代码片段示例:
- 自动生成标准分层目录与 build.gradle.kts 配置
- 按需输出 UseCase、Repository、Mapper、Room/SQLDelight/Ktor 实现骨架
- 自动补全 DI 配置与错误处理模式
- 检查并提示模块依赖违规、业务逻辑泄漏等反模式
7. 常见配套 Agent 与 Skill 协作
- 代码审查:Kotlin Reviewer Agent、Code Reviewer Agent 可自动识别分层/依赖违规、业务逻辑混乱等问题
- UI 层最佳实践:可结合 compose-multiplatform-patterns Skill 生成跨平台 UI 层代码
- 异步流/协程:与 kotlin-coroutines-flows Skill 协同,保证数据流与状态管理一致性
- 自动化 Hook:结合 Everything Claude Code Hooks 实现 PR 检查、分层审计、依赖流向校验等自动化
8. 与其他 Skill 的协作关系
- 规则体系:可与 Everything Claude Code Rules 搭配,统一多语言分层与依赖规范
- 工程初始化:结合 configure-ecc Skill 一键生成标准骨架
- 持续集成/验证:配合 verification-loop Skill 实现端到端分层验证循环
FAQ
Q: 这个 Skill 适用于纯 Android 项目还是 KMP 多平台工程?
A: 二者皆可。Skill 会根据你的项目类型自动输出 Room(Android)、SQLDelight/Ktor(KMP)等对应实现。
Q: 如何防止 domain 层被误引用 Android/数据层类型?
A: Skill 会自动检查 domain 依赖树,禁止任何 framework/entity/DTO 类型渗透,并在 PR 或代码生成时给出警告。
Q: 项目已存在部分业务逻辑在 ViewModel,能自动迁移到 UseCase 吗?
A: 可以。配合代码审查 Agent,Skill 可识别并建议/自动迁移业务逻辑到 UseCase,提升可测试性和分层一致性。