移动应用架构设计:MVVM 实战教程(零基础版)
一、开篇:什么是 MVVM?

你可能听说过 Android 开发中的一些术语,比如 MVC、MVP、MVVM。这些听起来很专业,其实它们是帮助我们把程序写得更清晰、更有条理的一种结构方式,在专业上我们称它为 “架构模式”。
今天我们要学习的是其中非常流行的一种模式——MVVM(Model - View - ViewModel)。
🤔 那它到底是干嘛的?
简单来说:
- 它帮助我们把界面(View)、数据(Model)和中间的逻辑连接层(ViewModel)分开。
- 这样做的好处是:代码更清晰、容易维护、测试更容易!
就像做菜一样,你会把食材洗好、切好、分别放好,而不是乱糟糟地混在一起。这样炒出来的菜才好看又好吃 😄
二、环境准备:Android Studio 搭建开发环境(新手友好)

在开始之前,你需要准备好开发环境。以下是详细步骤:
✅ 第一步:安装 Java JDK
大多数 Android 开发都需要 Java 或 Kotlin 环境。目前推荐使用 Java 17(与最新版 Android Studio 兼容最好)。
Windows 用户可以用 Adoptium 下载安装包。
Mac 用户可用 Homebrew:
brew install --cask temurin
✅ 第二步:下载并安装 Android Studio
前往官网 https://developer.android.com/studio 下载最新版本(推荐使用 Chipmunk 或更高版本)
安装过程中选择以下组件:
- Android SDK
- Android Virtual Device (AVD)
- Kotlin 插件(默认已带)
✅ 第三步:创建新项目
打开 Android Studio → Start a new Android Studio project → Empty Activity → 选择语言为 Kotlin
项目名称建议起一个简单的,比如:MyMVVMApp
然后点击 Finish,等待 Gradle 构建完成(首次构建时间可能稍长)。
三、核心概念:通俗易懂讲解 MVVM 的三要素

我们再来深入理解一下 MVVM 的三个组成部分:
1️⃣ Model(模型层)
它是负责管理数据的地方,比如从网络或者本地数据库获取数据。
举个例子:
data class User(val id: Int, val name: String)
class UserRepository {
fun getUserById(id: Int): User {
// 模拟从网络或数据库中获取数据
return User(1, "张三")
}
}
📌 你可以把它看成“厨房里的原材料”。
2️⃣ View(视图层)
这个就是我们看到的 UI 界面部分,也就是 XML 布局文件。这部分负责显示数据,并接受用户的操作。
比如我们在 activity_main.xml 中写一个按钮和一个文本框:
<TextView
android:id="@+id/tvName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="名字会在这里显示" />
<Button
android:id="@+id/btnLoad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="加载用户信息" />
📌 类比做饭的话,这就是“餐桌”,客人能看到的就是这层。
3️⃣ ViewModel(视图模型)
这是 MVVM 的核心所在!它不直接操作界面,而是处理逻辑,并把结果通知给 View 层更新。
我们可以用 ViewModel + LiveData 来实现自动刷新 UI:
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class MainViewModel : ViewModel() {
private val _user = MutableLiveData<User>()
val user: LiveData<User> get() = _user
private val repository = UserRepository()
fun loadUser(userId: Int) {
val data = repository.getUserById(userId)
_user.value = data
}
}
📌 ViewModel 就像是“厨师”,负责根据客户需求烹饪菜肴,并通知服务员(View)上菜。
四、实战项目:动手做一个“展示用户信息”的小 App
现在我们来动手写一个完整的 MVVM 示例,目标是点击按钮后,在界面上显示用户信息。
🔧 步骤 1:添加依赖项
在项目的 build.gradle(Module) 文件里加入:
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.6.1"
同步后继续下一步。
🔧 步骤 2:编写布局 activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="16dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tvName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="名字显示在这里"
android:textSize="24sp"
android:layout_marginBottom="16dp"/>
<Button
android:id="@+id/btnLoad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="加载用户信息" />
</LinearLayout>
🔧 步骤 3:修改 MainActivity.kt
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.activity.viewModels
import androidx.lifecycle.Observer
class MainActivity : AppCompatActivity() {
private val viewModel: MainViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val tvName: TextView = findViewById(R.id.tvName)
val btnLoad: Button = findViewById(R.id.btnLoad)
// 监听 liveData 数据变化
viewModel.user.observe(this, Observer { user ->
tvName.text = "姓名:${user.name}"
})
btnLoad.setOnClickListener {
viewModel.loadUser(1) // 模拟请求用户ID为1的数据
}
}
}
✅ 功能演示效果
运行 App 后,点击按钮就可以看到界面上显示出用户名:“张三”。🎉
五、常见问题解答(FAQ)
❓ 1. 我能不能不使用 LiveData?

可以,但 LiveData 是用来简化观察数据变化的工具。如果你自己手动监听数据变化,代码会变得复杂很多。而且 LiveData 更安全,避免了内存泄漏等问题。
❓ 2. ViewModel 和普通的类有什么区别?
ViewModel 被设计用来存活于 Configuration Change(例如屏幕旋转)之间,而普通类在屏幕旋转时可能会被销毁重建,导致数据丢失。
❓ 3. MVVM 一定比 MVP 好吗?
没有绝对的好坏之分。MVVM 在配合 LiveData/StateFlow 使用时会更加简洁直观;MVP 更适合一些老项目或团队习惯的开发方式。
❓ 4. 我学完 MVVM 就能找工作了吗?
MVVM 是 Android 工程师的必备技能之一,建议同时掌握协程(Coroutine)、Room 数据库、Retrofit、Jetpack 等相关技术,才能真正具备实战能力。
六、学习建议:接下来该往哪个方向努力?
恭喜你完成了第一个 MVVM 项目!
如果你打算继续深入移动开发,下面是一些进阶方向推荐:
✅ 必学知识
| 技术 | 用途 |
|---|---|
| 协程 Coroutine | 处理异步任务 |
| Retrofit & OkHttp | 网络请求 |
| Room 数据库 | 本地持久化数据 |
| DataStore | 替代 SharedPreferences |
| Compose | 新一代声明式 UI 框架 |
🌟 推荐学习路径
- 学习 Kotlin 基础语法(函数、类、接口)
- 练手多个小型 Demo(计算器、天气 App、待办清单等)
- 掌握 Android 生命周期与 Fragment 使用
- 学习 Jetpack 组件(ViewModel、LiveData、Navigation、Lifecycle)
- 系统掌握网络请求与本地数据库存储
- 学习 Jetpack Compose 或 ConstraintLayout 编写 UI
- 学习模块化、组件化设计思想
- 开始尝试企业级项目实践
七、结语:学习 MVVM,只是迈向职业开发的第一步

通过这篇入门教程,你已经掌握了什么是 MVVM 架构、如何搭建开发环境、如何写一个最简单的 MVVM 应用,也了解了最常见的几个问题。
记住一句话:“理论是骨架,实践才是血肉。”
继续动手写项目,才是提升最快的途径。希望你能保持热情,未来成为一位优秀的移动开发者 💪
如果觉得这篇文章对你有帮助,记得点赞、收藏、分享哦!也欢迎关注后续发布的《Jetpack Compose 实战》等系列文章。
祝你在 Android 开发的路上一路顺风!🚀
(全文约 3099 字)

评论 0