Android MVVM 架构简介及示例

引言

在 Android 应用开发中,设计模式的选择对应用的可维护性和可扩展性至关重要。从众多设计模式中,MVVM(Model-View-ViewModel)因其将 UI 逻辑与业务逻辑分离的特性而受到广泛关注。在本篇文章中,我们将探索 MVVM 架构,并通过示例代码加深理解。

MVVM 架构概述

MVVM 架构的组成部分如下:

  1. Model:负责应用的业务逻辑和数据,这部分与 UI 无关。
  2. View:负责显示界面,用户与 UI 的交互由此触发 ViewModel 的方法。
  3. ViewModel:连接 Model 和 View,负责处理 UI 的逻辑和每个 View 的状态。

这种架构的优势在于数据的双向绑定,可以让 View 和 ViewModel 在数据更新时自动同步。

类图

以下是 MVVM 架构的类图,以便于理解各部分之间的关系:

classDiagram
    class Model {
        +getData() : List<String>
    }
    
    class ViewModel {
        +fetchData() : void
        +getData() : LiveData<List<String>>
    }
    
    class View {
        +displayData(data: List<String>) : void
    }

    Model <--> ViewModel
    View <--> ViewModel

示例代码

接下来,我们通过一个简单的示例来展示 MVVM 架构的实现。在这个示例中,我们将创建一个应用来展示一个简单的字符串列表。

1. Model

首先,我们定义 Model 层,将其命名为 DataModel

public class DataModel {
    private List<String> data;

    public DataModel() {
        data = new ArrayList<>();
        data.add("Item 1");
        data.add("Item 2");
        data.add("Item 3");
    }

    public List<String> getData() {
        return data;
    }
}

2. ViewModel

接下来是 ViewModel 层,我们命名为 MainViewModel

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

public class MainViewModel extends ViewModel {
    private final DataModel dataModel;
    private final MutableLiveData<List<String>> dataList;

    public MainViewModel() {
        dataModel = new DataModel();
        dataList = new MutableLiveData<>();
        fetchData();
    }

    public void fetchData() {
        dataList.setValue(dataModel.getData());
    }

    public LiveData<List<String>> getData() {
        return dataList;
    }
}

3. View

最后是 View 层,通常为 Activity 或 Fragment,这里我们用 MainActivity 为例:

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.List;

public class MainActivity extends AppCompatActivity {
    private MainViewModel viewModel;
    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = findViewById(R.id.listView);
        viewModel = new ViewModelProvider(this).get(MainViewModel.class);

        viewModel.getData().observe(this, new Observer<List<String>>() {
            @Override
            public void onChanged(List<String> data) {
                ArrayAdapter<String> adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, data);
                listView.setAdapter(adapter);
            }
        });
    }
}

在这个简单的示例中,MainActivity 通过 ViewModel 观察数据更改,当数据发生变化时,ListView 会自动更新。

状态图

行为状态图可以帮助我们理解 MVVM 中 ViewModel 的状态机。以下是一个表示 ViewModel 状态的状态图:

stateDiagram
    [*] --> InitialState
    InitialState --> Fetching
    Fetching --> DataFetched
    DataFetched --> [*]

结论

MVVM 架构通过分离关注点,将 UI 和业务逻辑解耦,提高了应用的可维护性及可扩展性。通过本文的示例,相信你已经掌握了 MVVM 的基本概念及在 Android 中的应用。无论你是刚接触 Android 开发的新手,还是经验丰富的开发者,MVVM 模式都能帮助你构建更高效的应用程序。希望这篇文章能够对你的学习旅程有所帮助!