对MVP、MVVM、DataBinding、ButterKnife、Dagger2的初步学习
MVP & MVVM
MVP
view + presenter + model = MVP
1. 简化 activity,逻辑操作都交给 presenter;
2. view 和 model 不直接联系,通过 presenter 联系:
3. view 与 presenter,model 和 presenter 都是双向的;
优点:解耦、便于单元测试。
MVVM
view + viewModel + model = MVVM
在 MVP 基础上加入 DataBinding,通过强化 layout 布局文件功能,实现双向绑
定,抽离出视图逻辑,进一步简化 activity。
DataBinding & ButterKnife
DataBinding(官方、MVVM)
功能:分担 activity 的视图逻辑职责,在布局文件中直接绑定数据,不再需要 findViewById、OnClick 等,并且实现双向绑定;
以前 layout 文件是静态的,只能通过代码进行修改,大量的事件绑定和findViewById 以及视图的逻辑充斥在 Activity 中;
MVP 虽然实现了视图逻辑和视图操作的解耦,但还是需要大量的代码对 layout 设置属性,比如说 TextView 的 setText;
但 MVVM 的 Databinding ,把 layout 里面控件的某些属性绑定对应的 bean,把操作的控件看成 bean 对象,只需要对 layout 绑定的 bean 进行修改,layout 就会随之改变,同样的,控件的数据发生改变,绑定的数据也会随之改变;
这里的 bean 就是 MVVM中的 Model,那么对 bean 进行逻辑处理的就是VM,这样我们主需要关心 M 和 VM 之间的交互了。
备注:DataBinding 目前还处于初级阶段,可能还存在一些问题。
ButterKnife(第三方)
优势:ButterKnife 没有使用反射,而是 Java Annotation Processing 技术,在Java 代码编译成 Java 字节码的时候就已经处理了@Bind、@OnClick 这些注解。
Annotation processing 是在编译阶段执行的,它的原理就是读入Java源代码,解析注解,然后生成新的Java代码。新生成的Java代码最后被编译成Java字节码,注解解析器(Annotation Processor)不能改变读入的Java 类,比如不能加入或删除Java方法。
特点:无性能损耗,利用 Android ButterKnife Zelezny 插件可以直接导入布局文件对应的 findViewById,OnClick 等操作,简化代码输入量;
Dagger2(依赖注入)
网上比较好的讲解:
[Android:dagger2让你爱不释手-基础依赖注入框架篇]