关于在安卓开发中简化MVP设计模式带来的效率提升

MVP已经是开发中很常用的一种设计模式,尽管也有MVVP的改进版,但任何设计模式都是针对具体项目的具体情况而适应的。并不是有了设计模式才有项目工程,而是有了项目工程才产生的设计模式。所以,设计模式并没有哪个更高级的,只有哪个更适应当下各种需求和环境。

 

最开始我在项目中使用MVP设计模式的时候,会在不同的业务下实现Model,View,Persenter。Presenter负责具体和Activity,Fragment等UI实现类沟通,定义调用方法,Model负责具体每个网络请求及返回参数处理。并将结果通过Presenter回调,Presenter再返回给View层。这是比较标准的实现方式,但随着项目业务越来越多,API的数量甚至接近上百个,业务分类也越来越细。如果每个请求都需要在View和Presenter层定义对应的处理函数的话,不光View和Persenter层的代码量越来越大,连UI实现类的回调方法也越来越多,即使某个UI类只需要一个请求和回调,也不得不实现所有的无用回调类,导致代码的美观性和可读性大打折扣。所以我就做了一个小小的改进,在减少代码量消除臃肿代码的的同时,大大提高了开发的效率。

具体实现如下:

首先是View层,这里只需要定义一个基础View接口类,所有的UI实现类都实现它。

public interface IBaseView {
    /**
     * 请求成功返回
     * @param data
     */
    void setSuccess(String API, Object data);

    /**
     * 请求失败返回
     * @param data
     */
    void setFailure(String API, Object data);
}

再定义一个基础Presenter实现类

public interface BasePresenter {


    // 绑定view
    void onSuccess(String API, Object data);
    void onFailure(String API, Object data);

}

如,创建一个MainModel

public class MainModel {
    private MainPresenter presenter;

    public MainModel(MainPresenter presenter) {
        this.presenter = presenter;
    }


    public void getHomeData() {
        HttpParams params = new HttpParams();
        new HttpManager(new HttpManagerCallback() {
            @Override
            public void onSuccess(ResultData o) {
                HomeResponse data = GsonUtil.GsonToBean(o.getData(),HomeResponse .class);
                presenter.onSuccess(APIConstant.HOME_DATA,data);
            }

            @Override
            public void onError(ApiException e) {
                presenter.onFailure(APIConstant.HOME_DATA,e);
            }
        }).post(APIConstant.HOME_DATA,params);
    }

}

然后是Persenter实现

public class MainPresenter implements BasePresenter {
    private MainModel mainModel;
    private IBaseView mView;
    public MainPresenter(IBaseView mView) {
        this.mView = mView;
        mainModel= new MainModel(this);
    }

    public void getHomeData() {
        mainModel.getHomeData();
    }
 

    @Override
    public void onSuccess(String API, Object data) {
        mView.setSuccess(API, data);
    }

    @Override
    public void onFailure(String API, Object data) {
        mView.setFailure(API, data);
    }
}

UI实现类的调用效果

/**
 * UI交互
 */
public class MainActivity extends BaseActivity implements IBaseView {

    private MainPresenter mPresenter;

    @Override
    protected int getLayoutId() {
        return R.layout.activity_main;
    }


    @Override
    protected void initView() {
        mPresenter = new MainPresenter(this);
        mPresenter.getHomeData();
    }


    @Override
    public void setSuccess(String API, Object data) {
        if (isFinishing() || isDestroyed()) {
            return;
        }
        switch (API){
            case APIConstant.HOME_DATA:
                //这里处理返回数据
                HomeResponse entry = (HomeResponse) data;
                break;
        }
    }

    @Override
    public void setFailure(String API, Object data) {

    }

}

可能也有很多其他更简洁更好的实现方法,希望也能像大家多学习一下。

由于写的比较匆忙,欢迎理性交流和指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值