MVP

作者: HOLLE_karry | 来源:发表于2020-05-05 20:15 被阅读0次

背景:

开发的时候一般都会使用一些架构,好处就是代码逻辑清晰,提高模块之间的耦合,方便测试,维护;常见的的架构:MVC、MVP、MVVM。 可能由于MVP、MVVM的兴起,MVC在android中的应用变得越来越少了,但MVC是基础,理解好MVC才能更好的理解MVP,MVVM。因为后两种都是基于MVC发展而来的。

1.MVC概述

视图层(View):对应于xml布局文件和java代码动态view部分
控制层(Controller):MVC中Android的控制层是由Activity来承担的,Activity本来主要是作为初始化页面,展示数据的操作,但是因为XML视图功能太弱,所以Activity既要负责视图的显示又要加入控制逻辑,承担的功能过多。
模型层(Model):针对业务模型,建立的数据结构和相关的类,它主要负责网络请求,数据库处理,I/O的操作。
由于android中有个god object的存在activity,再加上android中xml布局的功能性太弱,所以activity承担了绝大部分的工作。因为activity扮演了controller和view的工作,所以controller和view不太好彻底解耦,但是在一定程度上我们还是可以解耦的。

2.MVP

⑴概述

模型(Model):负责处理数据的加载或者存储,比如从网络或本地数据库获取数据等
视图(View):负责界面数据的展示,与用户进行交互,相当于Activity
主持人(Presenter):相当于协调者,是模型与视图之间的桥梁,将模型与视图分离开来

⑵优点

•模块职责划分明显,层次清晰,接口功能清晰.
•Model层和View层分离,解耦.修改View而不影响Model.
•功能复用度高,方便.一个Presenter可以复用于多个View,而不用更改Presenter的逻辑.
•有利于测试驱动开发,以前的Android开发是难以进行单元测试.
•如果后台接口还未写好,但已知返回数据类型的情况下,完全可以写出此接口完整的功能.

⑶缺点

•MVP中接口过多.
•每一个功能,相比于MVC要多写好几个文件.
•如果某一个界面中需要请求多个服务器接口,这个界面文件中会实现很多的回调接口,导致代码繁杂.
•如果更改了数据源和请求中参数,会导致更多的代码修改.
•额外的代码复杂度及学习成本.

⑷具体案例

①创建MVP包,在里面建model、view、presenter包
MVP.png
②创建接口CallBack
public interface CallBack {
    void onSuccess(List<Bean.DataBean> dataBean);//成功方法  将datatBean中的数据添加到集合中
    void onFail(String string);//失败方法  String类型的值
}
③创建接口View
public interface View {
    void setData(List<Bean.DataBean> dataBean);//成功方法   获取datatBean中的数据
    void showToast(String string);//失败方法   吐司
}
④创建Model类(用来处理耗时操作)
public class Model {
    public void initData(int page, int id, final CallBack callBack) {
        new Retrofit.Builder()
                .baseUrl(ApiService.url_project)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build().create(ApiService.class)
                .getData2(page, id)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<DataBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(DataBean dataBean) {
                        if (dataBean!= null) {
                            callBack.onSuccess(dataBean.getData().getDatas());
                        }
                    }

                    @Override
                    public void onError(Throwable e) {
                        callBack.onFail(e.getMessage());
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }
}
⑤创建Presenter类(用来连接V层和M层)
public class Presenter implements CallBack {
    private NetView netView;
    private Model model;

    public Presenter(NetView netView) {
        this.netView = netView;
        this.model = new Model();
    }

    @Override
    public void onSuccess(List<Bean.DataBean> dataBean) {
        netView.setData(dataBean);
    }

    @Override
    public void onFail(String string) {
        netView.showToast(string);
    }

    public void initData(int page, int id) {
        model.initData(page,id,this);//在Model类中创建initData方法
    }
}
⑥在MainActivity中实现View(提供成功和失败的方法),创建presenter对象
Presenter presenter = new Presenter(this);
presenter.initData(page, id);
......
@Override
    public void setData(List<Bean.DataBean> dataBean) {
        list.addAll(dataBean);
        adapter.notifyDataSetChanged();
    }

    @Override
    public void showToast(String string) {
        Toast.makeText(getActivity(), string, Toast.LENGTH_SHORT).show();
    }

相关文章

  • Android MVP

    Android MVP初探 Android MVP进阶 Android MVP高级 Android MVP扩展

  • MVP / RxJava / Retrofit / RxBus

    MVP Android MVP 详解(上) Android MVP 详解(下) Android中的MVP模式,带实...

  • 一套完整的Android通用框架

    转自吴小龙同学的博客 MVP模式 MVP简介 Android MVP Sample,MVP+Retrofit+Rx...

  • MVP简单尝试

    MVP模式解析 标签: Android 架构 MVP MVP模式的核心思想 MVP将Activity中的U...

  • MVP基础架构

    MVP 是什么 基础架构 登录例子 MVP的优缺点 一、MVP 是什么 MVP全名是 Model - View -...

  • android 安卓 mvp mvvm - mvp

    android 安卓 mvp mvvm - mvpandroid 安卓 mvp mvvm - mvvm MVP M...

  • MVP架构

    目录 1)MVP简介2)MVP实例 1)MVP简介 MVP模式将Activity中的业务逻辑全部剥离出来,Acti...

  • MVC和MVP

    Android mvp 架构的自述 如何更高效的使用MVP以及官方MVP架构解析 老的MVC架构 新的MVP架构 ...

  • MVP系列-Android平台-第1讲-初探MVP

    MVP系列-Android平台-第1讲-初探MVP 内容一:什么是MVP?什么是MVC? 第一点:什么是MVP? ...

  • MVP框架学习

    一、MVP介绍 二、为什么使用MVP模式 三、MVP与MVC的异同 四、使用MVP实现Android的登录的Dem...

网友评论

      本文标题:MVP

      本文链接:https://www.haomeiwen.com/subject/uprvghtx.html