温馨提示:本文最后更新于
2025-12-17 23:26:25,某些文章具有时效性,若有错误或已失效,请在下方留言。MVVM(Model-View-ViewModel) 架构中 View、ViewModel 以及 Model 之间的交互逻辑,如下图所示

基本介绍
MVVM 架构的分层,如下图所示

![图片[3]-MVVM 架构-Stewed Noodles 资源](https://cdn.sa.net/2025/12/17/ePyvguRTj6hI2tf.webp)
Model(模型)
这一层负责对数据源进行抽象。Model 与 ViewModel 协作以获取和保存数据。
Repository
Repository(仓库) 是一种架构模式,用于统一管理数据来源,并向上层(ViewModel / UseCase)提供数据访问接口。
Repository 负责决定数据从哪里来(网络 / 数据库 / 缓存),对外只暴露统一的数据接口。
View(视图)
这一层的作用是将用户的操作通知给 ViewModel。View 会观察 ViewModel,并且不包含应用程序逻辑。
ViewModel(视图模型)
用于 存储和管理与 UI 相关的数据 ,将 UI 相关逻辑 与 UI 控制器(Composable / Activity / Fragment) 分离开来。它会向 View 暴漏与其相关的数据流。此外,它充当 Model 与 View 之间的连接桥梁。
ViewModel vs AndroidViewModel
| 类别 | 是否持有 Application | 适用场景 |
ViewModel | ❌ 不持有 Application | 不需要访问 Context管理 UI 状态处理业务逻辑 Repository 已提供数据,无需 Context |
AndroidViewModel | ✅ 持有 Application | 访问 Room 数据库读取 SharedPreferences加载资源文件(如字符串、图片 ID) 启动后台任务需要 Context使用系统服务(如 ConnectivityManager) |
ViewModelFactory
ViewModelFactory 用于创建带参数的 ViewModel。ViewModel 不能直接通过构造函数传参。
// ViewModel
class UserViewModel(
private val repository: UserRepository
) : ViewModel() {
fun loadUser() {
viewModelScope.launch {
repository.getUser()
}
}
}
// ViewModelFactory
class UserViewModelFactory(
private val repository: UserRepository
) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(UserViewModel::class.java)) {
@Suppress("UNCHECKED_CAST")
return UserViewModel(repository) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}
具体的使用
val factory = UserViewModelFactory(repository)
val viewModel = ViewModelProvider(this, factory)
.get(UserViewModel::class.java)
© 版权声明
THE END












暂无评论内容