Android MVVM(一) 介绍
来源:互联网 发布:java记住密码怎么实现 编辑:程序博客网 时间:2024/04/26 20:24
1、从MVP开始
MVP出现的前提就是减少了Activity的职责,简化了Activity中的代码,将复杂的逻辑代码提取到了Presenter中进行处理。与之对应的好处就是,耦合度更低,更方便的进行单元测试。
1. 各部分之间的通信,都是双向的。
2. View 与 Model 不发生联系,都通过 Presenter 传递。
3. View 非常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。
2、MVVM
说MVVM首先先提到标记语言,随着20世纪初web的崛起,HTML跟JS这样标记语言+程序语言的组合模式开始变得令人注目。逐渐推出的Flex、Sliverlight、QT、WPF、JSF、Cocoa等UI系统不约而同地选择了标记语言来描述界面。
在这样的架构中,view(或者说叫控件,不但是从依赖关系上跟程序的其他部件解耦,而且从语言上跟其它部分隔离开来)
然而这样的系统架构中,MVC和MVP模式已经不能很好地适用了。微软架构师John Gossman在WPF的XAML模式推出的同时,提出了MVVM的概念。
在安卓开发中,layout文件是静态的,只能通过代码进行修改,大量的事件绑定和finViewById以及视图的逻辑充斥在Activity中,使Acticity显得特别胖。
MVP虽然在一定程度上解决了Acticity代码量庞大,实现视图逻辑和视图操作的解耦,但是他们还是需要大量的代码对layout进行设置属性,比如说ImageView的setImageBitmap或者TextView的setText,显得特别啰嗦也很容易出错
但是而在安卓的Databinding中,把一个layout里面的控件的某些属性绑定对应的bean,把操作的控件看成bean对象,只需要对layout绑定的bean进行修改之后,layout就会随之改变。
这里的bean就是MVVM中的Model,那么对bean进行逻辑处理的就是VM(ViewModel),这样我们主需要关心M和VM之间的交互了。但是,还不能是实现双向绑定,比如说,对一个EditText的text属性绑定一个bean的属性,那么对EditText修改之后他的bean不会随之变化,当然可以自定义属性解决这个问题。
下面就是layout
<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <!-- 配置变量,name字段为下面想要引用的类,type为全类名, AS中快捷键ctrl+shift+alt+c --> <data> <import type="com.znke.hellodatabinding.test1.Person"/> <variable name="person" type="Person"/> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- 需要填充的字段用@{}表示 --> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="25sp" android:text="@{person.name}" /> </LinearLayout></layout>
一个布局文件就是一个ViewBinding对象,它包含了这个布局里面所有View和变量:
ActivityRecyclerviewBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_recyclerview);
注意,ActivityRecyclerviewBinding是系统自动生成的
然后看一下MVVM的示意图
MVVM是MVP的升级版,只是把presenter
变成了ViewModel
,并且MVVM支持绑定。
如果你不了解Databinding请移步
Demo地址
参考博文
MVC,MVP 和 MVVM 的图示
谈谈UI架构设计的演化
系列文章
Android MVVM之Databinding(二) 使用篇
- Android MVVM(一) 介绍
- android MVVM开发模式(一)
- 【MVVM】Android Data Binding实战(一)
- android MVVM模式初体验--(一)
- Android MVVM架构模式(一)
- Android架构学习MVC、MVP、MVVM(一)
- 浅谈Android中MVC、MVP、MVVM模式(一)
- Android MVVM架构模式 详解和综合运用(一)
- MVVM架构介绍(转)
- RoboBinding(MVVM)框架介绍
- Android----MVC、MVP、MVVM、区别介绍
- Android----MVC、MVP、MVVM、区别介绍
- Android----MVC、MVP、MVVM、区别介绍
- 全面介绍Android的MVVM框架
- Android----MVC、MVP、MVVM、区别介绍
- MVVM 介绍
- MVVM 介绍
- MVVM 介绍
- Apache 配置HTTPS协议搭载SSL配置
- apache和tomcate集成总结说明
- 使用如下css可以使div永远保持在屏…
- MyEclipse快捷键大全
- Sql语句总结
- Android MVVM(一) 介绍
- Java中的Timer和TimerTask的用法
- java返回json数据
- 使用HttpClient远程抓取网页内容
- HTML Parser功能强大的html解析,…
- java项目导出jar包,引入第三方jar…
- JavaMail发送邮件(带附件)
- Mybatis-There is no&nb…
- SQLSERVER 配置总结