MVP架构介绍
Android开发三大框架,MVC,MVP,MVVM,简单介绍下其余两种
MVC
M(Model)是数据模型,或者数据处理,V(View)是视图控件,C(controller)是逻辑控制类,MVC是以前常用或者老式的项目用的比较多,优势和缺陷都相当明显,感觉并会没有彻底做到VC分离的效果
优势:除了model是独立的,V和C在Activity中体现最为明显,Activity即作为V,也作为C,处理逻辑业务和UI交互非常方便,都在一个Activity里面搞定。
缺陷:它的优势也是它的缺陷,过度集成在同一个Activity里面,耦合度也比较强,抽离的话也有可能涉及到引用持有问题,代码量和逻辑会越来越多,越来不清晰,日后想要维护或者新增功能,成本会很高。
MVVM
View: 对应于Activity和XML,负责View的绘制以及与用户交互。
Model: 实体模型。
ViewModel: 负责完成View与Model间的交互,负责业务逻辑。
MVVM目的也是为了彻底分离控件和数据的架构,它主要是依靠DataBinding进行数据绑定,作用就是讲数据和控件绑定起来,当数据进行改变的时候,会自动刷新View,由于本人没用过,所以没什么发言权
MVP
MVP架构是当前比较流行开发框架,相比于MVVM,我觉得相比就多了一个更新数据的步骤,但是MVP的实现是不需要依赖框架,也是优势之一,灵活。
原理:将数据M层获取数据,由P层进行完成MV业务逻辑交互和数据更新逻辑,然后将数据结果传递给V层进行UI数据更新和UI业务处理。
作用:将M层和V层彻底隔离出来,每个层只需要负责自己的逻辑,然后要交互其它层,就经过P层开放的接口去处理。达到代码分割效果。
缺点:一个功能模块可能就需要一个P类,一个成熟的MVP项目会需要创建很多很多的契约类和P层类,且P层的代码量也会越来越重,维护相比MVC来说还是好很多倍了。
刚说了MVP的好处就是不需要依赖框架,所以实现起来也有灵活,可以配合各种模式实现MVP
MVP例子:
1.先创建些基本的契约类,BaseView用于P层View的结果回调,BasePresenter用于对应P类的初始化。当然也创建一个具体模块的测试契约类
public interface BaseContact {
interface BaseView {
void onSuccess();
void onFail();
}
interface BasePresenter<V>{
void onCreatePresenter();
void init(V view);
}
}
public interface TestContact{
interface View extends BaseContact.BaseView{
void showSomething(String msg);
}
interface Presenter<T> extends BaseContact.BasePresenter<T>{
void test(String msg);
}
}
2.创建基础的P类 和 下层具体模块的P类
public class BasePresenter <V extends