移动应用架构设计:MVVM 实战教程(零基础版)

高敏_前端
2025-06-25 02:54
阅读 708

一、开篇:什么是 MVVM?

一、开篇:什么是 MVVM?

你可能听说过 Android 开发中的一些术语,比如 MVC、MVP、MVVM。这些听起来很专业,其实它们是帮助我们把程序写得更清晰、更有条理的一种结构方式,在专业上我们称它为 “架构模式”

今天我们要学习的是其中非常流行的一种模式——MVVM(Model - View - ViewModel)

🤔 那它到底是干嘛的?

简单来说:

  • 它帮助我们把界面(View)、数据(Model)和中间的逻辑连接层(ViewModel)分开。
  • 这样做的好处是:代码更清晰、容易维护、测试更容易!

就像做菜一样,你会把食材洗好、切好、分别放好,而不是乱糟糟地混在一起。这样炒出来的菜才好看又好吃 😄


二、环境准备:Android Studio 搭建开发环境(新手友好)

二、环境准备: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 的三要素

我们再来深入理解一下 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?

应用性能监控-2

可以,但 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 框架

🌟 推荐学习路径

  1. 学习 Kotlin 基础语法(函数、类、接口)
  2. 练手多个小型 Demo(计算器、天气 App、待办清单等)
  3. 掌握 Android 生命周期与 Fragment 使用
  4. 学习 Jetpack 组件(ViewModel、LiveData、Navigation、Lifecycle)
  5. 系统掌握网络请求与本地数据库存储
  6. 学习 Jetpack Compose 或 ConstraintLayout 编写 UI
  7. 学习模块化、组件化设计思想
  8. 开始尝试企业级项目实践

七、结语:学习 MVVM,只是迈向职业开发的第一步

移动端调试工具-1

通过这篇入门教程,你已经掌握了什么是 MVVM 架构、如何搭建开发环境、如何写一个最简单的 MVVM 应用,也了解了最常见的几个问题。

记住一句话:“理论是骨架,实践才是血肉。”

继续动手写项目,才是提升最快的途径。希望你能保持热情,未来成为一位优秀的移动开发者 💪

如果觉得这篇文章对你有帮助,记得点赞、收藏、分享哦!也欢迎关注后续发布的《Jetpack Compose 实战》等系列文章。


祝你在 Android 开发的路上一路顺风!🚀

(全文约 3099 字)

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝