Android 使用 MVVM 框架

引言

MVVM(Model-View-ViewModel)是 Android 应用程序开发中的一项流行架构模式。该模式将应用程序的逻辑和UI分离,有助于提高代码的可维护性和可读性。在本文中,我们将探讨 MVVM 模式的基本概念,并提供一个简单的代码示例,以便更好地理解其实现。

MVVM 基本概念

MVVM 模式主要分为三个部分:

  1. Model:表示应用程序的数据和业务逻辑。它负责数据的获取、存储和状态管理。
  2. View:表示用户界面部分。它定义了UI的结构和显示内容,以及如何与用户交互。
  3. ViewModel:连接Model与View,并负责处理视图所需的数据逻辑。ViewModel 不直接引用View,而是通过数据绑定自动更新UI。

类图

下面是简单的 MVVM 类图,展示了 Model、View 和 ViewModel 之间的关系。

classDiagram
    class View {
        +onCreate()
        +displayData()
    }
    class ViewModel {
        +getData()
        +dataLiveData
    }
    class Model {
        +fetchData()
    }

    View --> ViewModel
    ViewModel --> Model

实际代码示例

1. Model

首先,我们定义一个 User 数据模型类,以及一个用于获取用户数据的 UserRepository

data class User(val id: Int, val name: String)

class UserRepository {
    private val users = listOf(
        User(1, "Alice"),
        User(2, "Bob"),
        User(3, "Charlie")
    )

    fun fetchUsers(): List<User> {
        // 模拟网络获取数据
        return users
    }
}

2. ViewModel

接下来,我们创建一个 UserViewModel 类,负责从 UserRepository 获取用户数据,并将其提供给View。

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

class UserViewModel : ViewModel() {
    private val userRepository = UserRepository()
    private val _users = MutableLiveData<List<User>>()
    val users: LiveData<List<User>> get() = _users

    fun loadUsers() {
        _users.value = userRepository.fetchUsers()
    }
}

3. View

最后,我们在 MainActivity 中使用 UserViewModel 来显示用户数据。

import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.lifecycle.Observer
import android.widget.TextView

class MainActivity : AppCompatActivity() {
    private val userViewModel: UserViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val textView = findViewById<TextView>(R.id.textView)
        userViewModel.loadUsers()

        userViewModel.users.observe(this, Observer { users ->
            textView.text = users.joinToString(", ") { it.name }
        })
    }
}

4. 布局文件

activity_main.xml 中,我们需要一个简单的 TextView 用于显示用户信息。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Users will appear here"/>
</RelativeLayout>

数据流动示意

下面是 MVVM 模式中数据流动的饼状图,展示了数据从Model流向View的过程。

pie
    title 数据流动图
    "Model" : 30
    "ViewModel" : 40
    "View" : 30

结论

MVVM 模式在 Android 开发中极大地方便了应用程序的结构化和管理。通过将业务逻辑与视图分离,开发者能更容易地进行单元测试,从而提升代码的可维护性。在本文中,我们通过一个简单的代码示例演示了如何使用 MVVM 框架来构建 Android 应用,建议开发者在实际项目中尝试此模式,以更好地组织代码和实现灵活的功能扩展。希望这篇文章能为你理解和使用MVVM提供一些帮助!