论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
云原生
›
VocabVerse背单词应用架构规划书
VocabVerse背单词应用架构规划书
嚴華
论坛元老
|
2025-4-6 04:43:47
|
显示全部楼层
|
阅读模式
楼主
主题
1724
|
帖子
1724
|
积分
5172
VocabVerse:Android 背单词应用架构规划书
书接上回,前次我们详细分析了,对于我们项目
开发
需要哪些技能栈,并且我的组员也带着各人相识了一下,一个崭新的Android项目标文件结构怎么样子,各个文件有什么用处(请移步我的同组同学的文章:https://blog.csdn.net/2301_76298602/category_12912535.html)
现在,根据以上条件,我们就可以根据我们本身的技能栈,搭建在这个崭新的项目里,开始我们的
开发
本篇介绍:①我们的技能栈需要的依赖,并且设置在gradle里。②我们的项目根据以上技能栈,怎么利用今世技能搭建我们本身的项目
一、依赖项解释
1. Kotlin相关
kotlinx-coroutines-android:Kotlin协程,用于简化异步操纵和线程管理
kotlinx-serialization-json:Kotlin序列化库,用于JSON数据的序列化和反序列化
2. Android核心
core-ktx:Kotlin扩展库,提供更简便的API
core-splashscreen:实现今世化启动画面
activity-compose:支持Compose的Activity
3. Jetpack Compose相关
各种Compose组件:构建今世化UI界面,包罗底子组件、Material3计划、动画等
constraintlayout-compose:Compose中的约束结构
accompanist系列:Compose的辅助库,处理体系UI控制和分页指示器等
4. 生命周期管理
各种lifecycle组件:管理Android生命周期,与Compose集成
5. 数据存储
datastore-preferences:替代SharedPreferences的今世化数据存储方案
room系列:SQLite对象映射库,用于本地数据库操纵
6. 导航
navigation-compose:Compose的导航组件
7. 依赖注入
hilt:简化依赖注入的库,基于Dagger但更简单易用
8. 媒体播放
exoplayer:用于播放单词发音等音频
9. 测试相关
各种测试库:单位测试、UI测试、协程测试等
mockk:Mocking库,用于测试
robolectric:在JVM上运行Android测试
我们可以在app目次下的build.gradle里进行设置
在里面的dependencies字段可以初步设置(以下为网络提供,仅供参考)
dependencies {
// Kotlin 扩展
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4'
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.0'
// AndroidX 核心
implementation 'androidx.core:core-ktx:1.10.0'
implementation "androidx.core:core-splashscreen:1.0.0"
implementation 'androidx.activity:activity-compose:1.7.0'
implementation 'com.google.android.material:material:1.8.0'
// Jetpack Compose
implementation platform("androidx.compose:compose-bom:2023.04.01") // 建议使用BOM管理版本
implementation "androidx.compose.ui:ui"
implementation "androidx.compose.ui:ui-tooling-preview"
implementation "androidx.compose.material3:material3"
implementation "androidx.compose.material3:material3-window-size-class"
implementation "androidx.compose.animation:animation"
implementation "androidx.constraintlayout:constraintlayout-compose:1.1.0-alpha09"
implementation "androidx.navigation:navigation-compose:2.6.0-alpha09"
implementation "androidx.lifecycle:lifecycle-runtime-compose:2.6.1"
implementation "androidx.paging:paging-compose:1.0.0-alpha18"
// Accompanist
implementation 'com.google.accompanist:accompanist-systemuicontroller:0.30.0'
implementation "com.google.accompanist:accompanist-pager-indicators:0.30.0"
// Lifecycle
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.1'
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1"
implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.6.1"
implementation "androidx.lifecycle:lifecycle-common-java8:2.6.1"
// 数据存储
implementation "androidx.datastore:datastore-preferences:1.0.0"
implementation "androidx.room:room-runtime:2.5.1"
implementation "androidx.room:room-ktx:2.5.1"
implementation "androidx.room:room-paging:2.5.1"
kapt "androidx.room:room-compiler:2.5.1"
// 媒体
implementation 'com.google.android.exoplayer:exoplayer-core:2.18.5'
// DI (Hilt)
implementation 'com.google.dagger:hilt-android:2.45'
kapt 'com.google.dagger:hilt-compiler:2.45'
implementation 'androidx.hilt:hilt-navigation-compose:1.0.0'
// 测试
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.4'
androidTestImplementation "androidx.compose.ui:ui-test-junit4"
debugImplementation "androidx.compose.ui:ui-tooling"
debugImplementation "androidx.compose.ui:ui-test-manifest"
testImplementation "androidx.room:room-testing:2.5.1"
// Hilt 测试
androidTestImplementation 'com.google.dagger:hilt-android-testing:2.45'
kaptAndroidTest 'com.google.dagger:hilt-compiler:2.45'
testImplementation 'com.google.dagger:hilt-android-testing:2.45'
kaptTest 'com.google.dagger:hilt-compiler:2.45'
// Mocking
testImplementation 'io.mockk:mockk-android:1.13.4'
testImplementation 'io.mockk:mockk-agent:1.13.4'
testImplementation "org.robolectric:robolectric:4.9.2"
}
复制代码
值得注意的是
目前有一种新的声明依赖的方式:
版本目次(Version Catalogs)
这两种依赖声明方式的重要区别在于
依赖管理机制
和
代码组织方式
:
方式示例说明
直接字符串声明
implementation 'androidx.core:core-ktx:1.10.0'直接在build.gradle中硬编码依赖坐标
版本目次(Version Catalogs)
implementation(libs.androidx.core.ktx)通过libs.xxx引用集中管理的依赖
版本目次(Version Catalogs)
版本号单点维护,修改时只需更新TOML文件
采取什么风格,取决于您本身的喜好。
重点介绍一个
开发
组件库:Jetpack
Jetpack 是
Google 官方推出的一套 Android
开发
组件库
,旨在帮助
开发
者更高效地构建
高质量、稳定且可维护
的 Android 应用。它并不是一个单一框架,而是由多个独立的库(如 ViewModel、Room、Navigation、Compose 等)组成的工具聚集,覆盖了今世 Android
开发
的各个方面。
Jetpack 的核心组件
Jetpack 重要分为
4 大类
,每类办理差异题目:
类别
代表组件
作用
Foundation
AppCompat、Android KTX、Multidex提供向后兼容、Kotlin 扩展支持等底子功能
Architecture
ViewModel、LiveData、Room、DataBinding帮助实现
MVVM
/
Clean Architecture
,管理数据、生命周期和持久化
Behavior
Navigation、WorkManager、Permissions处理导航、背景任务、权限等常见举动
UI
Compose、Material Design、Paging简化 UI
开发
,提供声明式界面(Compose)、分页加载等
为什么今世 Android
开发
都用 Jetpack?
类型内容1办理传统 Android
开发
的痛点
生命周期管理复杂
:Activity/Fragment 的生命周期容易导致内存泄漏(如旋转屏幕时数据丢失)。2标准化架构(MVVM + Clean Architecture)Jetpack 的架构组件(如 ViewModel、Repository、Room)天然支持
MVVM
和
Clean Architecture
,让代码:
分层清晰
(UI、Domain、Data 层分离)
可测试性高
(业务逻辑不依赖 Android 框架)
维护成本低
(减少耦合,易于扩展)3提拔
开发
效率用 Kotlin 代码写界面,比 XML 更灵活,减少 50% 以上的 UI 代码量。同一管理页面跳转,制止 Fragment 事件的复杂性。4兼容性与稳定性例如 AppCompat 让新特性(如深色模式)在旧体系上也能运行。5目前就能想到这么多…
Jetpack 的核心优势
优势
说明
减少样板代码
如 Room 自动生成数据库代码,Compose 替代 XML
标准化架构
逼迫使用最佳实践(如单向数据流、状态管理)
提高稳定性
制止内存泄漏、崩溃(如 LiveData 自动感知生命周期)
跨版本兼容
新特性(如深色模式、分屏)在旧 Android 版本上也能使用
无缝协作
组件之间高度集成(如 ViewModel + Navigation + Compose)
经典 Jetpack 技能栈示例
// 1. UI 层(Jetpack Compose)
@Composable
fun UserScreen(viewModel: UserViewModel = viewModel()) {
val userState by viewModel.userState.collectAsState()
// 声明式 UI
}
// 2. ViewModel(架构组件)
class UserViewModel @Inject constructor(
private val getUserUseCase: GetUserUseCase // Domain 层用例
) : ViewModel() {
val userState = mutableStateOf<User?>(null)
fun loadUser() {
viewModelScope.launch {
userState.value = getUserUseCase()
}
}
}
// 3. Data 层(Room + Retrofit)
@Entity
data class User(@PrimaryKey val id: Int, val name: String)
@Dao
interface UserDao {
@Query("SELECT * FROM user")
suspend fun getUsers(): List<User>
}
// 4. 依赖注入(Hilt)
@Module
@InstallIn(SingletonComponent::class)
object AppModule {
@Provides
fun provideUserDao(db: AppDatabase): UserDao = db.userDao()
}
复制代码
总结:为什么用 Jetpack?
标准化架构
:制止“意大利面条式”代码,逼迫最佳实践。
高效
开发
:减少 30%~50% 的样板代码(如数据库、UI、导航)。
稳定可靠
:Google 官方维护,办理传统 Android
开发
的痛点(生命周期、内存泄漏)。
面向未来
:Compose 代表声明式 UI 的未来,Kotlin 优先。
如果你的项目还没用 Jetpack,现在迁移正是时候!
二、架构规划书
我们可以对安卓
开发
官网进行阅读,来相识今世常用的
开发
结构
1. 架构选择:MVVM + Clean Architecture
采取MVVM模式结合Clean Architecture的分层计划,缘故起因:
MVVM (Model-View-ViewModel) 与 Clean Architecture 的结合是一种今世软件
开发
架构模式,它将界面逻辑与业务逻辑分离,同时保持代码的可测试性、可维护性和可扩展性。
1)重要好处
关注点分离
:清晰划分UI、业务逻辑和数据访问层
可测试性
:各层可独立测试,特别是业务逻辑不依赖UI框架
可维护性
:代码结构清晰,易于理解和修改
可扩展性
:各层独立演化,修改一层不影响其他层
团队协作
:差异团队可并行
开发
差异层
框架独立性
:业务逻辑不绑定特定UI框架,易于迁移
Jetpack组件友爱
:天然适配ViewModel、LiveData/Flow等组件
2)典范分层结构
表示层 (Presentation Layer)
:MVVM模式(View + ViewModel)
领域层 (Domain Layer)
:业务逻辑和实体
数据层 (Data Layer)
:数据获取和持久化实现
我们详细相识一下这个结构
2. 分层架构计划
1) 体现层 (Presentation Layer)
组件
:Activity + Compose UI + ViewModel
职责
:处理UI展示和用户交互
技能栈
:
Jetpack Compose构建UI
ViewModel管理UI状态
Hilt注入依赖
Navigation处理页面跳转
2) 领域层 (Domain Layer)
组件
:Use Cases (Interactors)
职责
:包罗核心业务逻辑和规则
特点
:
纯Kotlin代码,不依赖Android框架
每个用例代表一个详细的业务操纵
和谐数据层的操纵
3) 数据层 (Data Layer)
组件
:Repository实现 + 数据源
职责
:数据获取和持久化
子层
:
Repository
:同一数据访问接口
本地数据源
:Room数据库、DataStore
远程数据源
:(未来可扩展)API调用
技能栈
:
Room处理本地数据库
DataStore处理简单设置
Kotlin协程处理异步操纵
3. 详细模块计划(初步制定,可能根据版本更迭而调整)
app/
├── data/
│ ├── local/ # 本地数据源
│ │ ├── dao/ # Room DAO接口
│ │ ├── entity/ # 数据库实体
│ │ └── AppDatabase.kt
│ ├── repository/ # 仓库实现
│ └── model/ # 数据模型
├── domain/
│ ├── model/ # 领域模型
│ ├── repository/ # 仓库接口
│ └── usecase/ # 业务用例
├── presentation/
│ ├── component/ # 可复用Compose组件
│ ├── screen/ # 各功能屏幕
│ ├── theme/ # 应用主题
│ ├── navigation/ # 导航配置
│ └── viewmodel/ # ViewModel
└── di/ # 依赖注入配置
复制代码
举例子:
在 我们的项目中,有个核心功能,即AI生成四格漫画,那么在
Clean Architecture
条理中,将
AI 画图功能
划分取决于它的脚色和功能。
每个部分应该放在哪一层?
Domain 层(核心业务逻辑)
如果 AI 画图是核心业务逻辑的一部分
(例如,背单词时自动生成相关图片辅助记忆),那么它的
接口定义
(如 AiImageGenerator)可以放在
Domain 层
,但
详细实现
不能放在这里。
Domain 层只包罗抽象接口
,例如:
interface AiImageGenerator {
suspend fun generateImage(prompt: String): Result<Bitmap>
}
复制代码
如许,Domain 层不依赖详细实现(如 DeepSeek API),保持框架无关性。
Data 层(详细实现)
实际的 API 调用、网络请求、数据处理
应该在
Data 层
实现,例如:
class DeepSeekImageGenerator @Inject constructor(
private val apiService: DeepSeekApiService
) : AiImageGenerator {
override suspend fun generateImage(prompt: String): Result<Bitmap> {
// 调用 DeepSeek API,并返回 Bitmap
}
}
复制代码
这里可以引入 Retrofit、OkHttp 等网络库。
Presentation 层(UI 交互)
ViewModel
调用 Domain 层的 AiImageGenerator,但不关心详细实现。
Compose UI
负责显示生成的图片。
依赖关系
Presentation (UI) → Domain (接口) ← Data (实现)
复制代码
Domain 层
定义接口(AiImageGenerator),供
ViewModel
使用。
Data 层
提供详细实现(DeepSeekImageGenerator),并通过
依赖注入(Dagger Hilt)
提供给 Domain 层。
结论
AiImageGenerator 接口定义放在 Domain 层
(由于它属于业务逻辑)。
DeepSeekImageGenerator 实现放在 Data 层
(由于它依赖网络请求)。
ViewModel 调用 Domain 接口
,不关心详细实现。
如许计划符合
Clean Architecture
的
依赖倒置原则(DIP)
,使代码更灵活、可测试、易维护。
4. 关键技能实现方案
1) 数据持久化
单词数据
:使用Room存储单词、词库、学习记录等
用户偏好
:使用DataStore存储用户设置、学习进度等
2) 状态管理
使用StateFlow/SharedFlow + ViewModel管理UI状态
Compose中使用collectAsState()收集状态
3) 依赖注入
使用Hilt同一管理依赖
各层通过构造函数注入所需依赖
4) 导航
可以类比为Vue项目里的router功能
使用Navigation Compose实现单Activity架构
通过ViewModel共享导航状态
5. 科学性与优势
关注点分离
:各层职责单一,符合SOLID原则
可测试性
:
领域层可单独测试
数据层可mock测试
UI层可仪器化测试
可维护性
:模块化计划,修改一处不影响其他部分
可扩展性
:
易于添加新功能
未来可轻松接入网络数据源
Jetpack最佳实践
:完全遵循Google推荐的今世Android
开发
模式
6.
开发
流程
先计划数据模子和数据库结构
实现底子堆栈接口
编写核心业务用例
开发
UI组件
毗连各层,实现完整功能
编写单位测试和UI测试
这种架构经过大量生产项目验证,是当前Android
开发
的最佳实践之一,能够确保应用的稳定性、可维护性和可扩展性。
使用Navigation Compose实现单Activity架构
通过ViewModel共享导航状态
5. 科学性与优势
关注点分离
:各层职责单一,符合SOLID原则
可测试性
:
领域层可单独测试
数据层可mock测试
UI层可仪器化测试
可维护性
:模块化计划,修改一处不影响其他部分
可扩展性
:
易于添加新功能
未来可轻松接入网络数据源
Jetpack最佳实践
:完全遵循Google推荐的今世Android
开发
模式
6.
开发
流程
先计划数据模子和数据库结构
实现底子堆栈接口
编写核心业务用例
开发
UI组件
毗连各层,实现完整功能
编写单位测试和UI测试
这种架构经过大量生产项目验证,是当前Android
开发
的最佳实践之一,能够确保应用的稳定性、可维护性和可扩展性。
今天就到这里。以上图片和额外资料均来自安卓
开发
官网(https://developer.android.com/?hl=zh-cn)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
嚴華
论坛元老
这个人很懒什么都没写!
楼主热帖
iOS全埋点解决方案-用户标识 ...
用uniapp实现微信小程序的电子签名效果 ...
【万能皆可链接】C++中的动态链接库编 ...
【云服务器】推荐阿贝云服务器,目前永 ...
【Selenium+Pytest+allure报告生成自动 ...
MySQL实战45讲 20
【Javaweb】Web工作原理、两种网页、两 ...
Spring Boot 配置文件
Qt-FFmpeg开发-打开本地摄像头(6) ...
微服务介绍
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
图数据库
容器及微服务
Mysql
备份
运维.售后
快速回复
返回顶部
返回列表