移动应用架构设计:MVVM实战(适合零基础初学者的教程)

王者.梁丽.先锋
2025-06-22 00:06
阅读 338

一、开篇:什么是MVVM?它能帮我们做什么?

一、开篇:什么是MVVM?它能帮我们做什么?

在移动开发中,MVVM(Model-View-ViewModel) 是一种非常流行的软件架构设计模式。你可以把它想象成一种“搭积木”的方法——每一块都有自己的职责,互不干扰,便于管理和维护。

简单来说:

  • Model(模型):处理数据,比如从网络或本地数据库获取内容。
  • View(视图):就是你看到的界面,比如按钮、文字、图片等。
  • ViewModel(视图模型):负责连接 View 和 Model,把数据显示给 View,也可以接收用户操作并去请求数据。

💡 为什么使用 MVVM?

  • 更清晰的代码结构
  • 更容易测试和维护
  • 支持现代框架的数据绑定功能

二、环境准备:Android Studio + Kotlin 初体验

二、环境准备:Android Studio + Kotlin 初体验

所需工具:

  • Android Studio(推荐最新稳定版)
  • JDK(一般安装Android Studio时会自带)
  • 模拟器或者真实手机设备

步骤如下:

  1. 下载安装 Android Studio
  2. 打开后选择“Start a new Android Studio project”
  3. 选择模板:“Empty Activity”
  4. 命名项目,例如 MyMVVMApp
  5. 语言选择 Kotlin
  6. 其他保持默认,点击Finish等待项目生成

🔧 提示:如果你是Windows系统,可能会需要开启USB调试权限连接真机进行测试。


三、核心概念:用生活化的比喻理解MVVM

我们可以把一个APP看作一间餐厅:

移动应用界面设计-2

角色 类比角色 说明
Model 后厨厨师 负责做菜(处理数据)
ViewModel 服务员 接收客人点餐,并告诉厨房怎么做,再端上桌
View 客户+餐桌 显示菜肴(页面展示),接受客户反馈

这样分工明确,谁也不会互相干扰。


四、实战项目:构建一个天气预报App

我们要做一个可以输入城市名称、点击按钮查看天气的小App。

Step 1:添加依赖项(在 build.gradle (Module: app) 中添加)

dependencies {
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1"
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.6.1"
}

同步一下Gradle 👉 Sync Now


Step 2:创建布局文件(activity_main.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:padding="20dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/editCityName"
        android:hint="输入城市名称"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btnFetchWeather"
        android:text="查询天气"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/tvResult"
        android:textSize="18sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"/>
</LinearLayout>

Step 3:编写 ViewModel 层

新建文件:app/src/main/java/your/package/name/WeatherViewModel.kt

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel

class WeatherViewModel : ViewModel() {
    // LiveData用于通知UI更新
    private val _weather = MutableLiveData<String>()
    val weather: LiveData<String> get() = _weather

    // 模拟获取天气信息
    fun fetchWeather(city: String) {
        // 实际项目可以用网络请求代替
        val result = "$city 当前温度约 20°C(模拟数据)"
        _weather.postValue(result)
    }
}

Step 4:修改 MainActivity.kt

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
import your.package.name.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    private lateinit var viewModel: WeatherViewModel

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

        // 初始化ViewModel
        viewModel = ViewModelProvider(this)[WeatherViewModel::class.java]

        // 设置监听器
        binding.btnFetchWeather.setOnClickListener {
            val city = binding.editCityName.text.toString()
            viewModel.fetchWeather(city)
        }

        // 观察数据变化并更新UI
        viewModel.weather.observe(this) { result ->
            binding.tvResult.text = result
        }
    }
}

Step 5:运行你的 App 🚀

连接手机或启动模拟器,点击 Run 按钮。你会看到一个输入框和按钮,输入城市名,点击就会显示天气了!


五、常见问题解答(FAQ)

Q1:什么是 LiveData?和 MutableLiveData 有什么区别?

  • LiveData:不可变的,只能观察不能赋值。
  • MutableLiveData:可变的,可以改变它的值。

就像一个只读文件和一个可编辑文档的区别。


Q2:为什么要用 ViewModel?直接写在Activity不行吗?

如果写在一起,一旦横竖屏切换,Activity会重建,导致数据丢失。而 ViewModel 在配置变化(如旋转屏幕)时不会被销毁,因此更适合保存界面状态。


Q3:能不能不用MVVM,用别的方式?

当然可以!但 MVVM 是目前 Android 官方推荐的最佳实践之一。学习它可以让你更容易上手主流项目和团队协作。


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

学完本教程之后,你可以尝试以下方向进一步提升自己:

🧪 进阶技能:

  • 学习协程(Coroutine)和 Room 数据库
  • 使用 Retrofit 或 Ktor 请求真实天气API(如 OpenWeatherMap)
  • 加入 Jetpack Compose 来构建更现代的UI

📚 推荐资料:


总结:你已经迈出了重要的一步!

用户体验设计-1

通过本教程,你已经了解了 MVVM 架构的核心思想,并动手完成了一个简单的项目。现在你已经有能力阅读公司项目的代码结构,也能开始自己做一些小应用了!

继续加油,你离成为专业的Android开发者又近了一步 💪!


🎯 想进阶实战?下节课我们讲《Jetpack组件详解与高阶MVVM实战》,记得关注哦!

评论 0

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