当前位置: 首页 > 工具软件 > MVPFrame > 使用案例 >

MvpFrame—MVP框架

孙思源
2023-12-01

MvpFrame是一款是一款MVP通用框架,使用简单,有效的解决项目中的高度耦合性,使项目更有层次结构。

版本更新记录

版本更新记录

前序

随着项目的功能迭代,传统的MVC架构已经很难满足开发需求了,高耦合让维护成本变得越来越高,代码冗余程度也越来越高,代码最后变得臃肿不堪。所以,在实际项目中,我们跟多的选择MVP架构。MVP架构是代码结构层次更加清晰、项目更加容易维护,代码耦合性降低了。本文对于基础的mvp使用不做解释。

一、MvpFrame架构优点:

1)用泛型指定Presenter层,然后直接createPresenter方法即可获取到对于的presenter。
2)Presenter的生命周期与Activity生命周期同步绑定。
3)抽象工厂模式和反射机制,获取每个Presenter对象。
4)对Presenter的缓存处理。
5)异常情况下(如内存吃紧),对Presenter进行onSaveInstanceState保存数据的异常处理。

二、使用说明

step1、添加依赖( 必选)

dependencies {
   implementation 'com.alin:mvpframe:1.0.2'
   implementation 'com.alin:common-library:1.0.1'
}
    
复制代码

step2、注解@TargetPresenter(具体Presenter.class)( 必选)

step3、需要继承MvpActivity,并且指定Presenter的泛型类型TestMvpPresent(若有)( 必选)

step4、同时,实现Contract.IView<数据类型>( 可选)

step5、获取需要的Presenter,调用Presenter的初始化方法startWork()( 必选)。

 TestMvpPresent mPresenter = createPresenter();
 mPresenter.startWork();
复制代码

Activity使用示例:

@TargetPresenter(TestMvpPresent.class)
public class TestMvpActivity extends MvpActivity<TestMvpPresent> implements Contract.IView<TestBean>, View.OnClickListener {
    private TestMvpPresent mPresenter;

    @Override
    protected int getContentViewId() {
        return R.layout.activity_test_activity;
    }

    @Override
    protected void init(Bundle savedInstanceState) {
        //        创建说需要的Presenter
        mPresenter = createPresenter();
    }

    @OnClick({R.id.start_tv,R.id.skip_tv})
    public void onClick(View view){
        switch (view.getId()){
            case R.id.start_tv:
                mPresenter.startWork();//调用Presenter的初始化方法
                break;
        }
    }

    @Override
    public Context getViewContext() {
        return this;
    }

    @Override
    public void showContentView() {
     
    }

    //    数据请求失败回调
    @Override
    public void showError(String errorInfo, int errorCode) {
   
    }


//    数据请求成功回调
    @Override
    public void showContentData(TestBean data) {
        if (data != null) {
            showLog(data.toString());
            ToastUtil.showCenterToast(this,"TestMvpActivity : " + data.toString());
        }
    }
}
复制代码

Fragment使用示例:

@TargetPresenter(TestMvpPresent.class)
public class TestMvpFragment  extends MvpFragment<TestMvpPresent> implements Contract.IView<TestBean>, View.OnClickListener {
    private TestMvpPresent mPresenter;

    @Override
    protected int getContentViewId() {
        return R.layout.fragment_test_mvp;
    }

    @Override
    protected void init(Bundle savedInstanceState, View view) {
        //        创建说需要的Presenter
        mPresenter = createPresenter();
    }

    @OnClick({R.id.start_fm_tv})
    public void onClick(View view ){
        switch (view.getId()){
            case R.id.start_fm_tv:
                mPresenter.startWork();
                break;
        }
    }

    @Override
    public Context getViewContext() {
        return getContext();
    }

    @Override
    public void showContentView() {
        mTestRllyt.showContentView();
    }

    //    数据请求失败回调
    @Override
    public void showError(String errorInfo, int errorCode) {
        mTestRllyt.showEmptyView();
    }

    //    数据请求成功回调
    @Override
    public void showContentData(TestBean data) {
        if (data != null) {
            showLog(data.toString());
            ToastUtil.showCenterToast(getContext(),"TestMvpFragment : " + data.toString());
        }
    }
}

复制代码

三、补充说明:

如果只是简单的Activity、Fragment,不想继承MvpActivity、MvpFragment,可以直接继承CommonActivity。

普通的Activity使用示例:

public class TestCommonActivity extends CommonActivity {
    @Override
    protected int getContentViewId() {
        return R.layout.activity_test_common;
    }

    @Override
    protected void initialize(Bundle savedInstanceState) {
    }
}
    
复制代码

普通的Fragment使用示例:

public class TestCommonFragment extends CommonFragment {
    @Override
    protected int getContentViewId() {
        return R.layout.activity_test_common;
    }

    @Override
    protected void initialize(Bundle savedInstanceState) {
    }
}
复制代码

四、架构设计策略

架构设计策略

五、可能遇到的问题说明

1、QA:common-library库的版本问题?

解决方式:请点击查看CommonLibrary,使用最新版本。

dependencies {
   implementation 'com.alin:mvpframe:1.0.2'
   implementation 'com.alin:common-library:1.0.1'
}
  
复制代码

如果你觉得MvpFrame 能帮到你真正解决项目中的问题,就在博客中个我点个赞,或者去我的MvpFrame中star。 如果项目中有问题,可以直接给我留言。

联系方式

  github地址:https://github.com/Alin520/MvpFrame。
  掘金地址:https://juejin.im/post/5a7941c96fb9a0633f0dfe64
  CSDN地址:http://blog.csdn.net/hailin123123
  联系方式:
  欢迎加入QQ群:707202045
复制代码

转载于:https://juejin.im/post/5aa09e996fb9a028d936ba00

 类似资料: