移动应用架构设计:MVVM实战教程

国色天香
2025-06-13 15:02
阅读 343

在移动开发的世界里,我们不仅要写出能运行的代码,更要写易于维护、结构清晰、可测试性强的代码。今天我们要学习的 MVVM(Model-View-ViewModel)架构,就是目前 Android 开发中最主流的一种架构模式。

本篇教程专为零基础的小白准备,我们会从环境搭建开始,一步步带你实现一个简单的项目,让你真正理解什么是 MVVM。


一、MVVM 是什么?为什么它很重要?

一、MVVM 是什么?为什么它很重要?

MVVM 全称是 Model-View-ViewModel。我们可以简单地把它理解成一种让代码更有“条理”的方式。

举个生活中的例子:

  • Model:像是厨房里的食材和菜谱(数据层)
  • View:是你看到的餐桌上的饭菜(用户界面 UI)
  • ViewModel:是厨师,负责按照菜谱把食材变成饭菜,并根据顾客的要求调整菜品(逻辑处理)

使用 MVVM 的优势:

  • 便于团队协作
  • 方便后期修改和扩展
  • 更容易测试代码
  • 官方推荐的架构方式(Google 推荐)

二、环境准备:你只需要一个工具 —— Android Studio

二、环境准备:你只需要一个工具 —— Android Studio

步骤 1:下载安装 Android Studio

地址:https://developer.android.com/studio

选择适合你电脑操作系统的版本下载并安装。

步骤 2:创建新项目

打开 Android Studio → 点击 "New Project" → 选择 "Empty Activity" 模板
输入项目名称如 MyMvvmApp,语言选 Kotlin,点击 Finish。

现在你就有了一个空的 Android 项目。


三、核心概念讲解:三个角色各司其职

下面我们将通过一个最简单的例子——显示一行文字来讲解这三个部分怎么配合工作。

1. Model 层:数据来源

可以是一个本地文件、网络请求,也可以就是一个变量。

// UserData.kt
object UserModel {
    val userName = "李小白"
}

这个对象模拟了用户数据。实际开发中可以换成接口或数据库获取的数据。

2. ViewModel 层:连接 Model 和 View

我们在 ViewModel 中暴露 UI 需要的数据。

// UserViewModel.kt
import androidx.lifecycle.ViewModel

class UserViewModel : ViewModel() {
    val userName = UserModel.userName
}

ViewModel 是 Google 提供的一个类,用于存储与 UI 相关的数据,但又不直接依赖 View。

3. View 层:UI 显示部分

通常是一个 Activity 或 Fragment,在这里绑定 ViewModel 数据。

<!-- activity_main.xml -->
<TextView
    android:id="@+id/tvName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    android:textSize="24sp"
    android:padding="16dp"/>

然后在 Java/Kotlin 文件中绑定数据:

// MainActivity.kt
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
import com.example.mymvvmapp.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    private lateinit var viewModel: UserViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // 初始化 ViewModel
        viewModel = ViewModelProvider(this).get(UserViewModel::class.java)

        // 更新 UI
        binding.tvName.text = viewModel.userName
    }
}

这样我们就完成了一个最基础的 MVVM 架构程序。


四、实战项目:做一个“欢迎页面”

功能说明:

用户打开 App,就会看到一句欢迎语:“欢迎 李小白 使用我们的应用!”

虽然功能很简单,但我们用 MVVM 结构完整实现一遍。

Step 1:新建 Model

// GreetingModel.kt
object GreetingModel {
    fun getGreeting(userName: String): String {
        return "欢迎 $userName 使用我们的应用!"
    }
}

Step 2:新建 ViewModel

// GreetingViewModel.kt
class GreetingViewModel : ViewModel() {
    fun generateGreeting(name: String): String {
        return GreetingModel.getGreeting(name)
    }
}

Step 3:更新 XML 布局

<TextView
    android:id="@+id/tvGreeting"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:padding="16dp"/>

Step 4:更新 MainActivity

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    private lateinit var greetingViewModel: GreetingViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        greetingViewModel = ViewModelProvider(this).get(GreetingViewModel::class.java)

        val name = "张小红"  // 假设这是当前登录用户名
        val message = greetingViewModel.generateGreeting(name)

        binding.tvGreeting.text = message
    }
}

运行后你会看到:

欢迎 张小红 使用我们的应用!

✅ 成功实现了一个完整的 MVVM 示例。


五、新手常见问题解答

❓ 问:我一定要用 Kotlin 吗?

答:Android 支持 Java 和 Kotlin,但官方推荐使用 Kotlin,因为语法更简洁、安全且更适合 MVVM 结构。


❓ 问:ViewModel 跟普通的类有什么区别?

答:普通类不能感知生命周期,而 ViewModel 可以跟随 Activity 生命周期管理数据。即使屏幕旋转了,ViewModel 中的数据也不会丢失。


❓ 问:是不是每个项目都要自己写 ViewModel 类?

答:如果是小型项目可以手写;大型项目推荐结合 Jetpack ViewModel + LiveData 实现更好的状态管理和观察机制。


❓ 问:MVVM 是不是一定比 MVC 好?

答:没有绝对的好坏。MVC 更适合快速开发小程序,MVVM 适合长期维护的大项目。学会它,才能胜任中高级岗位。


六、学习建议:下一步该怎么学?

你现在掌握了一个非常重要的架构思想:MVVM。接下来你可以沿着这条线继续深入:

第一步:掌握 LiveData + ViewModel(安卓官方推荐组合)

val userName = MutableLiveData<String>()
fun updateName(newName: String) {
    userName.value = newName
}

第二步:了解 Room 数据库(持久化 Model)

学习如何将数据存在本地,比如用户信息保存到 SQLite。

第三步:学习协程 + Retrofit(网络请求)

让 ViewModel 能够从服务器获取数据。

第四步:学习 Jetpack Compose(现代 UI 开发)

Composable 组件 + ViewModel 组合,是未来主流趋势。


小结

在这一篇《移动应用架构设计:MVVM实战》教程中,我们完成了以下内容:

知识点 是否覆盖
MVVM 概念
环境搭建
Model、ViewModel、View 分工
实战项目演示
常见问题回答
下一步学习建议

跨平台开发对比-1

如果你是零基础的新手,请记住一句话:不要怕看不懂专业术语,先照着做一遍,再慢慢理解原理。

祝你在移动开发的路上越走越远!如果你想学习进阶内容,记得关注后续系列教程哦 🚀

评论 0

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