移动/游戏
用 Clean Architecture 与 Hilt…
在需要设计或重构 Android 项目结构、模块划分和依赖注入时,按 Clean Architecture 分层并用 Hilt 组织依赖。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
用 Clean Architecture通用
解决思路
- 将应用分为三个主要层级,依赖必须严格向内(或向下)流向核心逻辑:UI 层(Presentation)、Domain 层(业务逻辑,可选但推荐)、Data 层。
- UI 层(Presentation)负责展示数据和处理用户交互,组件包括 Activities、Fragments、Composables、ViewModels;它依赖 Domain 层(简单场景可直接依赖 Data 层),绝不直接依赖 Data 层的实现细节。
- Domain 层(业务逻辑)负责封装复杂业务规则和复用逻辑,组件包括 Use Cases(如 GetLatestNewsUseCase)和 Domain Models(纯 Kotlin data classes);必须是纯 Kotlin,不得包含任何 Android 框架依赖(不得出现 android.* import);依赖 Repository 接口。
- Data 层负责管理应用数据(获取、缓存、保存),组件包括 Repositories(实现)和 Data Sources(Retrofit APIs、Room DAOs);只依赖外部数据源和库。
- 使用 Hilt 进行所有依赖注入:在 Application 类上标注 @HiltAndroidApp。
- 在 Activities 和 Fragments 上标注 @AndroidEntryPoint。
- 在 ViewModels 上标注 @HiltViewModel,并使用标准 constructor 注入。
- 使用 @Module 和 @InstallIn(SingletonComponent::class) 提供应用级单例(如 Network、Database)。
- 在抽象类中使用 @Binds 绑定接口实现(比 @Provides 更清晰)。
- 生产应用采用多模块策略以改善构建时间和关注点分离::app 作为主入口,连接各功能。
- 创建 :core:model 存放共享 domain models(纯 Kotlin)。
- 创建 :core:data 存放 Repositories、Data Sources、Database、Network。
- 创建 :core:domain 存放 Use Cases 和 Repository 接口。
- 创建 :core:ui 存放共享 Composables、Theme、Resources。
- 创建 :feature:[name] 作为独立功能模块,包含自己的 UI 和 ViewModels,依赖 :core:domain 和 :core:ui。
- 实现检查清单:确保 Domain 层没有 Android 依赖。
- 实现检查清单:Repositories 默认使用 main-safe 的 suspend 函数(必要时内部使用 Dispatchers.IO)。
- 实现检查清单:ViewModels 通过 StateFlow 与 UI 层交互(参见 android-viewmodel 技能)。