Android MVVM模式的前世今生

在 Android 开发的历史中,MVVM(Model-View-ViewModel)模式已经成为一种主流的架构选择,它提供了一种清晰的方法来组织代码,使得 UI、业务逻辑和数据层之间的交互更加清晰和灵活。本文将探讨 MVVM 模式的起源、发展以及在 Android 中的应用。

在这里插入图片描述


在这里插入图片描述

MVVM 模式的起源

MVVM 模式最早起源于微软的 WPF(Windows Presentation Foundation)和 Silverlight 框架,用于简化用户界面的开发。它通过引入 ViewModel 层,将业务逻辑从 UI 代码中分离出来,使得开发者可以专注于界面设计和数据操作,而不必担心背后的复杂逻辑。

在这里插入图片描述

Android 中的 MVVM 模式

在 Android 开发中,MVVM 模式的引入主要是为了解决传统 MVC(Model-View-Controller)模式中的问题,如视图和控制器之间的高度耦合,以及难以测试的业务逻辑。MVVM 通过 ViewModel 层,提供了一种更加灵活的方式来处理数据和 UI 的交互。

Android MVVM 的发展

  • 早期实践:在 Android 开发早期,MVC 模式是主流,但随着应用复杂度的增加,MVC 模式的局限性开始显现。开发者开始探索新的架构模式,MVP(Model-View-Presenter)模式应运而生,它通过引入 Presenter 层来解耦视图和模型,但仍然需要手动处理数据绑定和 UI 更新。

  • MVVM 的引入:随着 Google 对 Jetpack 架构组件的推出,特别是 ViewModel 和 LiveData 的引入,MVVM 模式在 Android 开发中得到了广泛支持。ViewModel 帮助管理 UI 相关的数据,LiveData 则提供了一种观察数据变化的方式,使得 UI 能够自动响应数据的变化。

  • 数据绑定:Data Binding Library 的推出进一步简化了 MVVM 的实现,它允许开发者在 XML 布局文件中直接绑定数据,减少了样板代码,并提高了开发效率。

MVVM 在 Android 中的优势:

  • 分离关注点:UI 和业务逻辑分离,使得代码更容易理解和维护。
  • 提高可测试性:ViewModel 可以在没有 View 的情况下进行单元测试。
  • 提高可重用性:ViewModel 可以独立于 View 存在,可以被多个 View 重用。
  • 数据变化响应:使用 LiveData 或 DataBinding 观察数据变化,自动更新 UI。
  • 生命周期感知:ViewModel 感知 View 的生命周期,避免内存泄漏。

MVVM 在 Android 中的应用

在 Android 中,MVVM 模式通常与 Jetpack 架构组件一起使用,包括:

  • ViewModel:负责管理界面相关的数据和逻辑,确保在配置更改(如屏幕旋转)时数据不会丢失。
  • LiveData:一种可观察的数据持有者类,用于在数据变化时通知观察者,通常用于更新 UI。
  • Data Binding:一个框架,允许绑定布局文件中的 UI 组件直接与数据源交互,减少了代码量。
  • Repository:作为数据层的抽象,负责管理数据的获取和存储,通常与 ViewModel 交互。

在这里插入图片描述

MVVM 模式的三个主要组成部分:

  1. Model(模型)

    • 代表应用程序的数据和业务逻辑。
    • 通常由数据类和仓库类(Repository)组成,用于从本地数据库或远程服务器获取数据。
  2. View(视图)

    • 指的是用户界面,例如 Activity 或 Fragment。
    • 负责显示数据(来自 ViewModel)和传递用户交互(如点击事件)到 ViewModel。
  3. ViewModel(视图模型)

    • 作为 Model 和 View 之间的桥梁,负责处理与 UI 相关的数据和逻辑。
    • 通常使用 LiveData 或 StateFlow 来观察数据变化,并更新 UI。
    • ViewModel 不依赖于特定的 View,因此可以在配置更改(如屏幕旋转)时保持状态。

在这里插入图片描述

实现 MVVM 模式的步骤:

  1. 定义 Model

    • 创建数据类和仓库类,用于管理数据和业务逻辑。
  2. 创建 ViewModel

    • 使用 ViewModel 类或其子类创建 ViewModel。
    • 在 ViewModel 中定义与 UI 相关的数据和逻辑。
  3. 绑定 View 和 ViewModel

    • 在 Activity 或 Fragment 中,使用 ViewModelProvider 获取 ViewModel 实例。
    • 使用 LiveData 或 DataBinding 将 ViewModel 中的数据绑定到 UI 组件。
  4. 处理用户交互

    • 在 View 中监听用户事件,如按钮点击,并将事件传递给 ViewModel 处理。
  5. 更新 UI

    • 当数据发生变化时,ViewModel 会更新 LiveData 中的数据,View 会自动响应这些变化并更新 UI。

示例代码:

public class MyViewModel extends ViewModel {
    private LiveData<String> data;

    public LiveData<String> getData() {
        if (data == null) {
            data = new MutableLiveData<>();
            loadInitialData();
        }
        return data;
    }

    private void loadInitialData() {
        // Load data from database or API
        data.setValue("Initial data");
    }
}

public class MyActivity extends AppCompatActivity {
    private MyViewModel viewModel;

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

        viewModel = new ViewModelProvider(this).get(MyViewModel.class);
        final TextView textView = findViewById(R.id.text_view);

        viewModel.getData().observe(this, data -> {
            // Update UI
            textView.setText(data);
        });
    }
}

在上述示例中,MyViewModel 负责管理数据,MyActivity 则负责显示数据并更新 UI。当数据发生变化时,MyActivity 会自动更新显示的内容。

在这里插入图片描述

结语

MVVM 模式在 Android 开发中的应用,不仅提高了代码的可维护性和可测试性,还使得 UI 开发更加直观和高效。随着 Android 开发框架的不断发展,MVVM 模式将继续在构建高质量应用中发挥重要作用。如果你还没有尝试过 MVVM,那么现在是一个不错的开始时机。


在这里插入图片描述


在这里插入图片描述

📂 Unity 开发技能 | 目录索引

📂 Unity 常用插件 | 总目录

📂 Unity 开发资源 | 目录索引

📂 Unity 源码工程 | 总目录

🍉🍉🍉 如果觉得这篇文对你有帮助的话,请点个赞👍、收藏⭐️下吧,非常感谢! 💕💕💕


在这里插入图片描述

🥷🏻博主简介:20年软件开发经验,经历嵌入式驱动开发、Android开发、Unity游戏开发。积累收藏了大量游戏开发资源和素材,如有需要请联系我。

互3互推也请联系我…

在这里插入图片描述

  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unity打怪升级

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值