移动应用架构设计:MVVM实战教程(适合零基础新手)
📌 开篇:什么是 MVVM?它能帮我们做什么?

在开发一个手机应用时,你会写很多代码来完成各种功能,比如显示界面、处理用户点击、请求网络数据等等。随着项目越来越大,如果代码没有一个好的组织方式,就很容易变得混乱、难以维护。
MVVM(Model-View-ViewModel)是一种用来组织代码结构的设计模式。它的核心思想是:把视图(UI界面)和业务逻辑分开,提高代码的可读性和可维护性。
为什么选择 MVVM?
- 职责分明:UI负责显示,数据和业务逻辑由专门的部分处理。
- 更易测试:因为逻辑不依赖于界面,可以单独测试。
- 便于协作:前端开发者和后端开发者可以更清晰地分工。
- 适配性强:尤其适合现代移动开发框架(如Android的Jetpack ViewModel + LiveData,以及iOS SwiftUI或Swift MVVM)。
🔧 环境准备:搭建你的第一个 MVVM 项目

本教程以 Android 平台为例,使用 Kotlin + Jetpack ViewModel + LiveData + Activity + Fragment 的组合 来实现 MVVM 架构。
如果你是 iOS 开发者,也可以参考这个逻辑,用 Swift 实现类似结构。
步骤1:安装 Android Studio
- 前往官网下载最新版 Android Studio
- 安装完成后打开
- 新建一个项目:
- 模板选择 Empty Activity
- 语言选 Kotlin
- 其他保持默认,点 Finish
步骤2:添加必要的依赖库(build.gradle)
打开 build.gradle (Module) 文件,在 dependencies 中添加以下依赖:
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1'
同步 Gradle 后即可使用 ViewModel 和 LiveData 功能。
🧠 核心概念讲解:用最简单的语言解释 MVVM 的三部分
MVVM 分为三个部分:View、ViewModel、Model
| 名称 | 英文全称 | 扮演角色 | 负责内容 |
|---|---|---|---|
| View | 视图(UI) | 用户看得见的部分 | 显示界面、按钮、文本等 |
| ViewModel | 数据模型观察器 | 中间人 | 存储数据,响应用户的操作 |
| Model | 数据层 | 数据提供方 | 请求网络、本地数据库、数据转换等 |
举个生活中的例子帮助理解:
想象你在做一杯果汁:
- View(杯子):你看到和喝到的地方,不能自己调味道。
- ViewModel(调酒师):他知道怎么做这杯果汁,根据需求决定加什么。
- Model(厨房食材):提供真正的原料(比如苹果、西瓜),负责取原料的工作。
这样每个人只做自己的事,就不会乱套了!
🛠️ 实战项目:做一个“点击计数器”APP(附详细代码)
我们要做的 App 功能很简单:有一个按钮,每次点击都会让数字加1,并且界面上会显示这个数字的变化。
我们将用 MVVM 架构实现这个功能。
第一步:创建布局文件 activity_main.xml
双击打开 res/layout/activity_main.xml,改为如下代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<TextView
android:id="@+id/textCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textSize="48sp"/>
<Button
android:id="@+id/buttonPlus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="加 1"/>
</LinearLayout>
这是我们的界面,包括一个显示数字的 TextView 和一个按钮。
第二步:创建 ViewModel 类(MainViewModel.kt)
新建一个 Kotlin 类:MainViewModel.kt
输入以下代码:
import androidx.lifecycle.ViewModel
import androidx.lifecycle.MutableLiveData
class MainViewModel : ViewModel() {
// 使用 MutableLiveData 可变数据源,保存当前数字
private val _count = MutableLiveData<Int>(0)
val count = _count // 供外部观察用
// 方法:点击一次按钮,+1
fun increment() {
_count.value = (_count.value ?: 0) + 1
}
}
说明:这里用了
MutableLiveData来保存变化的数据,通过observe就可以让页面自动更新。
第三步:绑定 UI 与 ViewModel(MainActivity.kt)
修改 MainActivity.kt 内容如下:
import android.os.Bundle
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
// 自动创建 ViewModel,生命周期自动管理
private val viewModel: MainViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 观察 ViewModel 中的 count 数据变化
viewModel.count.observe(this, Observer { count ->
textCount.text = count.toString()
})
// 点击按钮时触发 ViewModel 的 increment 方法
buttonPlus.setOnClickListener {
viewModel.increment()
}
}
}
这里有几个关键点:
by viewModels()是自动帮你创建和管理 ViewModel 的方式。viewModel.count.observe()让界面知道数据变了之后要刷新。setOnClickListener()把用户行为交给 ViewModel 处理。
第四步:运行看看效果吧!
点击 Run 按钮,运行你的 App。
你应该能看到一个大大的数字 0,每点一次按钮就会加1,神奇吧?
💡 常见问题解答(FAQ)
Q1:ViewModel 是不是就是以前的 “控制器”?
A:可以这么理解,但比传统的 Controller 更智能。它是专门为配合 LiveData 设计的,能自动管理生命周期(比如横竖屏切换时不会被销毁重置)。
Q2:为什么 ViewModel 不直接操作 TextView?
A:因为那样会让 ViewModel 和 View 耦合度太高,违背了 MVVM 分离的原则。应该通过 LiveData 让 View 自己监听数据变化,这样更灵活也更容易测试。
Q3:LiveData 和 MutableLivaData 的区别是什么?
A:
MutableLiveData是可变的,通常放在 ViewModel 中,用于内部改变值。LiveData是不可写的,只允许外界观察变化,保护数据安全。 你可以理解为:_count是房间里的变量,只能自己改;count是给外面看的“观察窗口”。
Q4:如何调试 ViewModel 是否正常工作?
A:可以用 Log 或 Toast 输出日志,或者使用 Android Studio 的 Debug 工具查看变量是否变化。建议多写单元测试。
📚 学习路径建议:学完今天的内容下一步怎么走?
如果你已经完成了上面的实战项目,并且能够理解 MVVM 的基本逻辑,恭喜你!你可以继续学习下面这些进阶主题:
✅ 基础巩固
- 学习使用 Room 数据库(持久化数据)
- 理解并实践 Repository 模式(整合本地和远程数据)
- 掌握协程(Coroutine)和 ViewModel 配合使用
✅ 实战提升
- 做一个带网络请求的 App,比如从 API 获取天气信息
- 结合 RecyclerView 显示列表数据(需要 Adapter + LiveData)
- 在 Fragment 中使用 ViewModel,共享数据
✅ 拓展方向
- 学习 Clean Architecture(Clean 架构)——更大型项目常用的架构方案
- 使用 Dagger / Hilt 实现依赖注入(进一步提高可测试性)
- 学习 Compose + ViewModel 的结合使用(未来趋势)
✅ 总结
今天我们学会了:
- 什么是 MVVM 以及它的三个组成部分
- 如何搭建 Android 开发环境
- 一步步实现了一个简单但完整的 MVVM 应用
- 遇到常见问题时如何排查
- 接下来的学习方向
记住一句话:MVVM 不是为了炫技,而是为了让代码更好写、更好改、更好维护。
希望你能动手跟着敲一遍代码,真正体验一下 MVVM 的魅力!
如果你喜欢这类教程,请持续关注后续课程,我们会继续深入讲解更多移动端开发知识 👨💻📚🔥
📝 字数统计:约3520字

评论 0