移动应用架构设计:MVVM实战(面向零基础初学者)
开篇:MVVM 是什么?它为什么重要?

想象一下你正在做一个蛋糕,你要把所有材料(面粉、鸡蛋、糖)先准备好,再一步步地加工成成品。在移动开发中,我们写的应用程序也类似——需要把数据处理和界面展示分开管理。
MVVM(Model-View-ViewModel) 就是一种帮助我们“分层做蛋糕”的结构方式。它的核心思想是:
让界面代码与业务逻辑分离,让代码更容易维护和测试。
这在开发大型 App 时尤其重要。使用 MVVM,你可以更清晰地组织项目结构,提高代码可读性,还能让你以后换公司或者团队时,更容易接手别人的代码。
为什么要学 MVVM?
- 📈 大多数主流 Android 开发框架(如 Jetpack)默认使用 MVVM。
- 🎯 提高代码质量,避免“面条式代码”(Spaghetti Code)。
- 🧪 更容易进行单元测试。
- 💼 市场需求大,面试常考内容!
环境准备:搭建你的第一个开发环境

我们以 Android 平台为例,使用 Kotlin + Android Studio 来完成本次实战。
第一步:安装 Android Studio
- 访问官网 https://developer.android.com/studio
- 下载对应操作系统的版本
- 安装完成后打开 Android Studio
第二步:创建新项目
- 打开 Android Studio,点击 Start a new Android Studio project
- 选择模板:
Empty Activity - 项目名称建议命名为
MyMvvmApp - 语言选择 Kotlin
- 其他保持默认即可
等待 Gradle 构建完成后,你的项目就准备好了!
核心概念:通俗易懂讲明白 MVVM 的组成

MVVM 包含三部分:
1. Model(模型)
➡️ 你可以把它理解为“蛋糕原料”,也就是数据的来源和处理方法。
举个例子:
data class User(val id: Int, val name: String)
object UserRepository {
fun getUser(): User {
// 模拟从网络或数据库获取数据
return User(1, "张三")
}
}
2. View(视图)
➡️ 用户看到的界面,比如按钮、文字、图片等。
在 Android 中,通常指的是你的 XML 文件(布局文件),例如:
<TextView
android:id="@+id/userNameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
3. ViewModel(视图模型)
➡️ 连接 View 和 Model 的桥梁。它负责准备数据,并将数据绑定给 View 显示。
class UserViewModel : ViewModel() {
private val _user = MutableLiveData<User>()
val user: LiveData<User> get() = _user
init {
loadUser()
}
private fun loadUser() {
val userFromRepo = UserRepository.getUser()
_user.postValue(userFromRepo)
}
}
📌 ViewModel 的特点:
- 不持有任何 View 的引用,避免内存泄漏
- 数据变更后通知 View 自动更新
实战项目:跟着我一起写一个简单的用户信息展示 App


目标:展示用户的姓名和 ID,数据来自 Repository。
第一步:添加 ViewModel 支持
在 build.gradle (Module) 添加如下依赖:
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1'
然后 Sync Now。
第二步:创建 Model(User 和 UserRepository)
新建 Kotlin 文件 User.kt 和 UserRepository.kt
User.kt
data class User(val id: Int, val name: String)
UserRepository.kt
object UserRepository {
fun getUser(): User {
// 模拟获取数据
return User(1001, "李华")
}
}
第三步:创建 ViewModel
新建 UserViewModel.kt
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class UserViewModel : ViewModel() {
private val _user = MutableLiveData<User>()
val user: LiveData<User> get() = _user
fun loadUser() {
val data = UserRepository.getUser()
_user.postValue(data)
}
}
第四步:连接 ViewModel 和 View(Activity)
修改 MainActivity.kt 内容如下:
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.activity.viewModels
import androidx.lifecycle.Observer
import com.example.mymvvmapp.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private val viewModel: UserViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// 监听数据变化并更新 UI
viewModel.user.observe(this, Observer { user ->
binding.userNameTextView.text = "用户名:${user.name}"
binding.userIdTextView.text = "ID:${user.id}"
})
viewModel.loadUser()
}
}
第五步:修改布局文件(activity_main.xml)
确保有这两个 TextView(可以自己添加):
<TextView
android:id="@+id/usernameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_marginTop="16dp"/>
<TextView
android:id="@+id/userIdTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:layout_marginTop="8dp"/>
⚠️ 注意:请确保 binding.textView 中的变量名与 XML 中的 id 名称一致。
效果预览
运行 App 后,界面上应该会显示:
用户名:李华
ID:1001
恭喜!你已经成功实现了 MVVM 架构的第一个小项目 🎉
新手常见问题解答(FAQ)
❓ Q1:ViewModel 和 Activity 的生命周期有什么关系?
答:ViewModel 存在于 Activity 销毁前都不会被销毁,即使屏幕旋转也不会重置。因此非常适合用来保存临时数据。
❓ Q2:LiveData 和 MutableLiveData 有什么区别?
答:
MutableLiveData可以被修改(用_user.postValue())LiveData是只读的,适合提供给外部观察变化(用user.observe(...))
建议 ViewModel 里对外暴露 LiveData,而不是 MutableLiveData。
❓ Q3:ViewModel 能传参吗?
答:默认的 by viewModels() 不支持传递参数。如果想传参,需要自定义 ViewModelProvider.Factory。
❓ Q4:可以用 MVVM 来做复杂的功能吗?
答:当然可以!MVVM 正是为了应对复杂业务而诞生的。随着你学习深入,你会发现配合 Room 数据库、Retrofit 网络请求,再加上 MVVM,可以构建非常强大的 App!
学习建议:下一步你可以怎么学?
✅ 初级进阶建议
| 阶段 | 学习内容 | 推荐资源 |
|---|---|---|
| 1 | 学会使用 ViewModel 和 LiveData | 官方文档、YouTube 入门教程 |
| 2 | 学习 Room 数据库(本地存储) | Android Room 持久化官方指南 |
| 3 | 引入 Retrofit 或 Ktor 做网络请求 | Retrofit 官方 GitHub |
| 4 | 使用 Kotlin 协程(Coroutines)处理异步任务 | Kotlin Coroutines 官方文档 |
| 5 | 学习用 Navigation 组件实现页面跳转 | Android 官方 Jetpack Navigation 文档 |
🔁 实战练习建议
- ✍️ 练手项目一:待办事项(Todo List)App
- ✍️ 练手项目二:天气预报 App
- ✍️ 练手项目三:新闻资讯 App(网络 + 数据库 + 页面交互)
结语:坚持就是进步的关键!
恭喜你完成了第一篇关于 MVVM 的完整入门教程 🎊
你现在拥有了扎实的基础,可以继续向更复杂的项目迈进。
如果你觉得这篇文章对你有帮助,请收藏 + 分享给朋友。下一篇文章我们将一起学习《使用 Retrofit 获取网络数据》!
🎯 记住一句话:编程不是背公式,而是多动手、勤实践!
加油,未来的移动端高手!🚀

评论 0