MVVM设计模式在Android编程中的应用

MVVM设计模式在Android编程中的应用_第1张图片

MVVM设计模式在Android编程中的应用

大家好,这一期呢,我们来看一下mvvm的设计模式。

Mvvm的意思是model, view, viewmodel。

Model. 这一部分控制的是应用的数据部分,它不能够直接的跟视图进行交互。通常的说,会把自己的数据接口暴露给view model, 下文中的例子中涉及到的数据有用户名,密码,是否点击按钮等等。

View. 这一部分主要是应用中的可视部分,它来观察viewmodel的上的变化。

View model. 它是model和view的桥梁。

它跟mvp相比,有哪些特点呢?

view model这一层替换掉了presenter这个中间层。

Presenter会有一个view的引用,但是viewmodel没有。

Presenter通过传统的方式,用激活事件的方法来更新视图。

view model会发送数据流。

Presenter和view是1对1的关系。

而view和view model是一对多的关系。

view model不知道view在聆听。

在安卓编程中有两种方式实现mvvm。

一种是data binding即数据绑定。

另一种是RxJava。

这个例子中我们还会沿用前面用的那个程序需求, 就是登录以后,显示一个消息。在这其中,我们来展示view model在没有view引用的情况下,如何做到这一步的。

这里有个问题,有没有可能在没有引用的情况下通知某些类呢?

有,在安卓中有三种方式: 双向数据绑定, 实时动态数据,使用Rx Java。

我们来看一下,双向数据绑定是怎么做到的。双向数据绑定的意思是说,在视图中发生的任何改变会传递到数据模型当中,同样的,数据模型的任何改变也会反映到视图上面。

在我们的例子中view model跟view之间的关联就是双向的。

我们需要binding adapter和xml定制的属性。 

首先,要在build.gradle文件中添加如下设置:

然后是定义ViewModel:

MVVM设计模式在Android编程中的应用_第2张图片

在XML中绑定View和ViewModel:

MVVM设计模式在Android编程中的应用_第3张图片

View中使用DataBinding,定义BindAdapters:

MVVM设计模式在Android编程中的应用_第4张图片

在上面例子中,由于需要显示用户名和密码输入错误,所以在按钮点击触发中处理比较合适。并没有聆听用户名和密码的输入。

假设在未来有一个文本框,文本框的数据需要动态更新的话,就可以使用另一个BindAdapter聆听数据改变,然后显示在视图当中。

MVVM的好处是双向的数据绑定,不需要传送View给ViewModel。

不好的地方是流程的熟悉需要较长的过程,并不容易上手。

保持联系,请点击关注。

你可能感兴趣的:(MVVM设计模式在Android编程中的应用)