美文网首页
MVP思想与解耦view与model

MVP思想与解耦view与model

作者: 梦星夜雨 | 来源:发表于2020-06-15 11:15 被阅读0次

前言

通过上篇的例子可以看出来,在MVC中,Activity作为Controller层,首先要加载应用布局,然后初始化界面,View的操作,用户逻辑基本上都在Activity开发,导致Activity的代码非常拥挤,并且MVC模型Model层和View层是可以直接交流的,这就导致项目耦合性提升,这会给后期开发和维护造成困难。
经过一系列的演变MVP(Model-View-Presenter)也应运而生。

结构

  • Model:模型层-面向需求模型,数据模型。对应Bean实体,SqliteDataBase。
  • View:对应Activity,Fragment,自定义View等java文件,这里的Activity负责View的绘制,显示,响应用户的操作。
  • Presenter:Presenter层将原来的Controller业务逻辑转移到Presenter层,同时断绝View和Model层的联系,达到解耦的目的。

流程关系

  1. View收到用户的操作,把用户的操作交给Presenter。
  2. Presenter控制Model进行业务逻辑处理。
  3. Presenter处理完毕后,数据封装到Model。
  4. Presenter收到通知后,再更新View。

代码展示

我们就写一个简单的业务功能,情景是用户点击屏幕上的按钮,去网络上请求一张图片。



工程目录:



优点:
  1. View层与model层完全分离
  2. 所有逻辑处理和交互都在presenter中
  3. MVP分层较为严谨

缺点:
造成类数量爆炸,代码复杂度和学习成本高,在某些场景下presenter的复用会产生接口冗余。

改进MVP

在以上代码中,我们可以做个测试,在DownLoaderPresenter中开启一个线程,退出应用后GC,分析发现MainActivity依旧在,容易造成内存泄漏。


下面我们来进行代码的改进。在Presenter中新增一个弱引用WeakReference,同时使用了泛型和抽象类对之前的代码进行了优化。

public abstract class BasePresenter<M extends BaseModel,V extends BaseView,CONTRACT> {
    protected M m;
    private WeakReference<V> vWeakReference;

    public BasePresenter() {
        m = getModel();
    }
    public void bindView(V v) {
        vWeakReference = new WeakReference<>(v);
    }

    public void unBindView() {
        if (vWeakReference!=null){
            vWeakReference.clear();
            vWeakReference = null;
            System.gc();
        }
    }

    protected V getView(){
        if (vWeakReference != null) {
            return vWeakReference.get();
        }
        return null;
    }

    public abstract CONTRACT getContract();
    public abstract M getModel();
}

改进后发现同样的操作,进行内存分析后Activity不存在了。


至此,MVP讲解完毕。
Demo源码地址

相关文章

  • MVP思想与解耦view与model

    前言 通过上篇的例子可以看出来,在MVC中,Activity作为Controller层,首先要加载应用布局,然后初...

  • Google MVP Demo学习心得

    MVP模式通过presenter隔离了View和Model两个模块之间的交互,实现View和Model完全解耦。 ...

  • MVC解重解耦到MVP

    MVP面向协议编程-> 主要目的:解重管理器Controller层,解耦view和model之间相互依赖的关系 解...

  • 说说view与model解耦

    在开发应用时,一般我们都是一个view对应一个model作为它的数据源,model的实例变量值通过一定的对应关系显...

  • ios MVP 设计模式

    MVP MVP全称Model-View-Presenter。顾名思义: Model:与MVC中的model没有太大...

  • MVC;MTV

    MVC: 是一种软件设计典范,主要思想:解耦(分开) m:model v:view c:controller c...

  • iOS-软件架构思想MVC、MVVM、MVP、组件化、链式语法相

    本篇收录其他人iOS架构思维. 1.说说view与model解耦2.TableView之MVVM与MVC之对比3....

  • 0基础 Android MVP —— 1、初试

    MVP——Model-View-PresenterModel:用于数据的操作。View:用于界面的显示与用户交互,...

  • Android MVP架构的使用及详解

    写在前面 MVP作为一种优越于MVC的架构,大程度上地解耦了view层和model层,分离逻辑交互、数据获取、数据...

  • MVP

    MVP (MVP 模式) mvp的全称为Model-View-Presenter,Model提供数据,View负责...

网友评论

      本文标题:MVP思想与解耦view与model

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