Android MVVM架构模式,详详详细学习

这篇具有很好参考价值的文章主要介绍了Android MVVM架构模式,详详详细学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MVVM(Model-View-ViewModel)

是一种基于数据绑定的架构模式,用于设计和组织应用程序的代码结构。它将应用程序分为三个主要部分:Model(模型)、View(视图)和ViewModel(视图模型)。

  • Model(模型):负责处理数据和业务逻辑。它可以是从网络获取的数据、数据库中的数据或其他数据源。Model层通常是独立于界面的,可以在多个界面之间共享。
  • View(视图):负责展示数据和与用户进行交互。它可以是Activity、Fragment、View等。View层主要负责UI的展示和用户输入的响应。
  • ViewModel(视图模型):连接View和Model,作为View和Model之间的桥梁。它负责从Model中获取数据,并将数据转换为View层可以直接使用的形式。ViewModel还负责监听Model的数据变化,并通知View进行更新。ViewModel通常是与View一一对应的,每个View都有一个对应的ViewModel。

MVVM的特点和优势

  1. 解耦合:MVVM通过将View和Model解耦合,使得它们可以独立开发和测试。ViewModel作为中间层,将数据从Model传递给View,避免了直接在View中处理业务逻辑的情况。
  2. 可维护性:MVVM的分层结构使得代码更易于维护。View只负责展示数据和用户交互,ViewModel负责处理业务逻辑和数据转换,Model负责数据的获取和存储。这种分离使得代码更加清晰和可读,也方便进行单元测试。
  3. 数据驱动UI:MVVM采用数据绑定的方式,将Model的数据与View进行绑定。当Model的数据发生变化时,ViewModel会自动更新View的显示,无需手动更新UI。这种方式可以减少手动更新UI的代码量,提高开发效率。
  4. 可测试性:由于MVVM的分层结构和数据驱动UI的特点,可以更容易地进行单元测试。ViewModel中的业务逻辑可以独立于View进行测试,而不需要依赖于Android系统或UI组件。

常见架构模式(MVC和MVP)区别

  • MVC(Model-View-Controller):MVC模式中,Controller负责处理用户输入和业务逻辑,Model负责数据和业务逻辑,View负责展示数据。与MVC相比,MVVM将Controller分离为ViewModel,将数据绑定的方式集成进来,使得代码更加简洁和清晰。
  • MVP(Model-View-Presenter):MVP模式中,Presenter负责处理用户输入和业务逻辑,Model负责数据和业务逻辑,View负责展示数据。与MVP相比,MVVM将Presenter分离为ViewModel

MVVM三个核心组件

在MVVM模式中,有三个核心组件:Model(模型)、View(视图)和ViewModel(视图模型)。它们各自具有不同的职责和作用,并通过数据绑定机制实现彼此之间的关系和交互。

Model(模型):

  • 职责:负责处理数据和业务逻辑。它可以是从网络获取的数据、数据库中的数据或其他数据源。Model层通常是独立于界面的,可以在多个界面之间共享。 - 作用:提供数据和处理数据的方法,封装业务逻辑。 - 示例代码:
java public class User {     private String name;     private int age;       // getter and setter methods       // 数据获取的方法     public LiveData getUser() {       // 从网络或数据库获取用户数据       return userRepository.getUser();     }       // 数据更新的方法     public void updateUser(User user) {       // 更新用户数据       userRepository.updateUser(user);     }       // ...   }   

View(视图):

  • 职责:负责展示数据和与用户进行交互。它可以是Activity、Fragment、View等。View层主要负责UI的展示和用户输入的响应。 - 作用:将ViewModel中的数据展示给用户,并将用户的输入传递给ViewModel。 - 示例代码:
java public class MainActivity extends AppCompatActivity {        private UserViewModel userViewModel;        private TextView nameTextView;        private TextView ageTextView;            @Override        protected void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.activity_main);                nameTextView = findViewById(R.id.nameTextView);            ageTextView = findViewById(R.id.ageTextView);                userViewModel = new ViewModelProvider(this).get(UserViewModel.class);            userViewModel.getUser().observe(this, user -> {                // 更新UI显示 nameTextView.setText(user.getName());                ageTextView.setText(String.valueOf(user.getAge()));            });        }            // 处理用户输入的方法 public void onUpdateUserClick(View view) {            // 从UI获取用户输入 String name = nameEditText.getText().toString();            int age = Integer.parseInt(ageEditText.getText().toString());                // 更新ViewModel中的数据 User user = new User(name, age);            userViewModel.updateUser(user);        }            // ...    }   

ViewModel(视图模型):

  • 职责:连接View和Model,作为View和Model之间的桥梁。它负责从Model中获取数据,并将数据转换为View层可以直接使用的形式。ViewModel还负责监听Model的数据变化,并通知View进行更新。ViewModel通常是与View一一对应的,每个View都有一个对应的ViewModel。 - 作用:处理View层的数据展示和用户交互,并与Model层进行交互。 - 示例代码:
java
  public class UserViewModel extends ViewModel {
    private User user;
    private UserRepository userRepository;
​
•    public UserViewModel() {
•      userRepository = new UserRepository();
•      user = new User();
•    }
​
•    // 获取数据的方法 public LiveData<User> getUser() {
•      return user.getUser();
•    }
​
•    // 更新数据的方法
•    public void updateUser(User user
​
) {
      user.updateUser(user);
    }
​
    // ...
  }

ViewModel通过数据绑定机制将Model的数据与View进行绑定,实现数据的自动更新。当Model的数据发生变化时,ViewModel会自动通知View进行更新。这种数据绑定的方式减少了手动更新UI的代码量,提高了开发效率。

下面是一个示意图,说明了MVVM模式中Model、View和ViewModel之间的关系和交互方式:

        +-------------+
        |    Model    |
        +-------------+
              |
              |
              v        +-------------+
        |  ViewModel  |
        +-------------+
              |
              |
              v
        +-------------+
        |     View    |
        +-------------+

在这个示意图中,ViewModel通过数据绑定机制将Model的数据绑定到View上,当Model的数据发生变化时,ViewModel会自动通知View进行更新,从而实现UI的自动刷新。用户的输入通过View传递给ViewModel,ViewModel再将数据传递给Model进行处理。

通过MVVM模式,Model、View和ViewModel之间的分离和解耦合,使得代码更易于维护和测试。ViewModel作为中间层,负责处理业务逻辑和数据转换,使得View层只关注UI的展示和用户交互,而不关心具体的业务逻辑和数据处理。这种分层结构和数据绑定的方式使得代码更加清晰、可读性更强,并提高了开发效率和代码质量。

MVVM数据绑定机制

在MVVM模式中,数据绑定是实现View和ViewModel之间数据同步的关键机制。它允许将View中的UI元素(如TextView、EditText)与ViewModel中的数据属性进行绑定,当数据发生变化时,自动更新UI,同时用户的输入也会自动同步到ViewModel中。

数据绑定的原理是通过观察者模式和反射机制实现的。当ViewModel中的数据发生变化时,会触发相应的通知,通知绑定的View进行更新。而当用户在View中输入数据时,数据绑定也会将输入的数据自动同步到ViewModel中。这种双向的数据同步机制,使得View和ViewModel之间实现了数据的实时同步。

在Android中,可以使用数据绑定库(如Data Binding)来实现MVVM模式中的数据绑定。Data Binding库提供了一组注解和工具类,可以简化数据绑定的实现过程。

以下是在Android中使用Data Binding库实现MVVM模式中的数据绑定的步骤:

  1. 配置Data Binding库:在项目的build.gradle文件中,添加Data Binding的插件和依赖项。
    // ...
    dataBinding {
        enabled = true
    }
}
​
dependencies {
    // ...
    implementation 'androidx.databinding:databinding-runtime:7.0.2'
}
  1. 创建布局文件:在布局文件中,使用标签包裹布局,并使用标签定义绑定的变量和表达式。
    <data>
        <variable            name="user"
            type="com.example.mvvm.User" />
    </data>
    <LinearLayout        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.name}" />
        <TextView            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{String.valueOf(user.age)}" />
    </LinearLayout>
</layout>
  1. 创建ViewModel类:创建一个与View对应的ViewModel类,并在其中定义与布局文件中绑定的变量。
java
public class UserViewModel extends BaseObservable {
    private String name;
    private int age;
​
    // getter and setter methods
​
    @Bindable    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
        notifyPropertyChanged(BR.name);
    }
​
    @Bindable    public int getAge() {
        return age;
    }
​
    public void setAge(int age) {
        this.age = age;
        notifyPropertyChanged(BR.age);
    }
}
  1. 绑定数据:在Activity或Fragment中,使用DataBindingUtil类将布局文件与ViewModel进行绑定,并设置ViewModel的数据。
public class MainActivity extends AppCompatActivity {
    private UserViewModel userViewModel;
​
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
​
        // 创建ViewModel实例
        userViewModel = new UserViewModel();
        userViewModel.setName("John");
        userViewModel.setAge(25);
​
        // 绑定ViewModel和
​
布局文件 ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    binding.setUser(userViewModel);
  }
}

通过以上步骤,我们将布局文件和ViewModel进行了绑定,同时设置了ViewModel的数据。当ViewModel中的数据发生变化时,布局文件中相应的UI元素会自动更新。同时,当用户在UI元素中输入数据时,Data Binding库也会自动将输入的数据同步到ViewModel中。

使用数据绑定的好处是能够简化代码,减少手动更新UI的代码量,提高开发效率。它还能够降低代码的耦合性,使得UI和数据逻辑的修改更加灵活和独立。另外,数据绑定还能够提高代码的可读性和可维护性,使得代码更易于理解和调试。《更多内容可查了主页信息,可捕获进阶知识》

MVVM架构模式发展趋势

MVVM模式在Android开发中已经得到广泛应用,并且在未来仍然有着较大的发展潜力。以下是一些未来发展趋势:

Jetpack Compose:

Jetpack Compose是Google推出的一种全新的UI框架,它采用了声明式UI的方式,与MVVM模式非常契合。Jetpack Compose能够简化UI开发流程,提供更加灵活和响应式的UI编程方式。

数据驱动UI:

未来,数据驱动UI的概念将会更加普及和强调。MVVM模式的数据绑定和观察者模式是实现数据驱动UI的重要手段,未来可能会有更多的框架和工具出现,进一步简化数据和UI的绑定过程。

更强大的ViewModel组件:

Android Jetpack中的ViewModel组件已经为开发者提供了很多便利,但未来可能会有更多功能和特性被添加进来,以进一步提高ViewModel的灵活性和可扩展性。

跨平台开发:

MVVM模式的解耦特性使得代码更具可移植性,未来可能会有更多的跨平台开发框架和工具出现,使得开发者能够更轻松地在不同平台上使用MVVM模式进行开发。文章来源地址https://www.toymoban.com/news/detail-663673.html

到了这里,关于Android MVVM架构模式,详详详细学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大型Android项目架构:基于组件化+模块化+Kotlin+协程+Flow+Retrofit+Jetpack+MVVM架构实现WanAndroid客户端

    前言:苟有恒,何必三更眠五更起;最无益,莫过一日曝十日寒。 之前一直想写个 WanAndroid 项目来巩固自己对 Kotlin+Jetpack+协程 等知识的学习,但是一直没有时间。这里重新行动起来,从项目搭建到完成前前后后用了两个月时间,平常时间比较少,基本上都是只能利用零碎的

    2024年02月09日
    浏览(54)
  • Android开发中的前五个代码异味:Jetpack Compose UI和MVVM

    代码异味是指软件代码中潜在问题的指标,可能并不一定是错误,但可能会导致问题,如增加维护复杂性、降低性能或降低可读性。我们将探讨Android开发中的前五个代码异味,其中包括使用Jetpack Compose UI和Model-View-ViewModel(MVVM)架构的示例。 上帝对象或上帝类是指试图做太

    2024年02月02日
    浏览(40)
  • Android 架构模式

    1.三个基本架构 在Android中,开发架构就是描述视图层、逻辑层、数据层三者之间的关系和实施。 Android中有3个基本的架构模式。 ①MVC(Model-View-Controller) Model:模型层,代表数据模型,用于获取和存储数据。 View:视图层,即呈现给用户的UI,即xml布局文件。 Controller:控制

    2024年02月07日
    浏览(28)
  • 安卓Android 架构模式及UI布局设计

    Android UI 设计是指在Android应用程序中创建用户界面的过程。这涉及到使用XML布局文件定义界面元素的位置和外观,以及通过Java或Kotlin代码处理用户交互。Android UI设计包括使用各种视图组件(如按钮、文本框、列表等)和布局管理器(如线性布局、相对布局等)来构建用户友

    2024年04月13日
    浏览(52)
  • 【Android】【Bluetooth Stack】Android Bluetooth架构分析(超详细)

    1. 精讲蓝牙协议栈(Bluetooth Stack):SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论 2. 欢迎大家关注和订阅,【蓝牙协议栈】和【Android Bluetooth Stack】专栏会持续更新中.....敬请期待! 目录 1. Android Bluetooth发展历程简介 2. Android Bluetooth架构 2.1 Android Bluetooth架构图

    2024年04月11日
    浏览(65)
  • MVVM架构模式

    一、MVVM简介 MVVM是Model-View-ViewModel的简写。即是模型-视图-视图模型。 MVVM架构模式是一种软件设计模式,它将应用程序分为三个部分:模型(Model)、视图(View)和视图模型(ViewModel)。该模式的目的是将用户界面(UI)逻辑与业务逻辑分离,以便开发人员可以更轻松地管理

    2024年02月11日
    浏览(34)
  • 深入理解MVVM架构模式

    原文合集地址如下,有需要的朋友可以关注 本文地址 MVVM是一种用于构建用户界面的软件架构模式,它的名称代表着三个组成部分:Model(模型)、View(视图)和ViewModel(视图模型)。MVVM的主要目标是将应用程序的UI与其底层数据模型分离,通过数据绑定实现数据和UI的自动

    2024年02月12日
    浏览(34)
  • 【软件架构模式——MVC、MVP、MVVM】

    1. MVC(Model-View-Controller) 概念介绍: MVC是一种软件架构模式,用于组织应用程序的代码和逻辑。它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。 **模型(Model)**负责处理应用程序的数据逻辑和状态。它表示应用程序的数据源,并封装了与

    2024年02月11日
    浏览(62)
  • android mvvm实例解析

    MVVM架构,将整个应用分为三层,View层,VM层,Model层。其中View层单向引用VM层,VM层单向引用Model层。如上图。 单向引用,而非双向引用,这是MVVM与MVP最大的区别。View层,只是单向引用VM层,VM层不需要引用View层,但是却可以 更新View层。这是通过VM层的观察者模式实现的,在

    2024年02月14日
    浏览(44)
  • Android开发-Android开发环境搭建(Android Studio详细安装教程,适合新手)

    01 Android开发工具 Android Studio Android Studio是谷歌推出的一个Android集成开发工具, 基于 IntelliJ IDEA .类似Eclipse ADT, Android Studio提供了集成的Android开发工具用于开发和调试 架构组成 。基于Gradle的构建支持 。Android专属的重构和快速修复 。提示工具以捕获性能、可用性、版本兼容性

    2024年02月09日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包