Android网络开发框架Retrofit(五:实战篇,实现MVP模式进行开发)

来源:互联网 发布:百度软件管家官方下载 编辑:程序博客网 时间:2024/05/21 15:41

Android网络开发框架Retrofit(五:实战篇,实现MVP模式进行开发)


从前面几节的代码看来,似乎很不优雅,特别是四:扩展篇,Retrofit+RxJava,加上RxJava后,代码看起来相当的难看,所以今天就说下如果使用MVP开发模式,将业务逻辑和界面分离,使我们的代码变得优雅好看起来

mvp,即是(model-处理业务逻辑(主要是数据读写,或者与后台通信(其实也是读写数据)),view-处理ui控件,presenter-主导器,操作model和view)
是从mvc模式演变过来的,在Android开发中,使用mvc模式,Activity变得不伦不类,不知道应该是v还是c了,为了解决这个问题,mvp出来了,将Activity划分成了view,在Activity中,我们只做更新界面的操作,其他的业务逻辑再也不放在Activity中了,这样可以更方便的管理我们的代码,利用这种开发模式还有一个很大的好处,就是团队开发项目起来快捷了很多,项目构建师将mvp中的p写好,将m和v分给团队成员,因为都是一个个接口,只要团队成员实现这些接口,这个项目就可以很快完成了,这样项目进度会大大的提高了很多,那么接下来,我们将mvp这种模式的实现展示一下

先建立好相对应的包名
比如我项目的包名是com.ysbing.retrofitdemo,在mvp中的目录下面会这样建立

注意我红框标注的地方,model和model下面的impl,presenter和presenter下面的impl,ui里面的activity,还有view
从目录结构可以看得出mvp的分工了,这样,分成几个模块后,写起来一开始会费点功夫,但这个模式搭建出来后,再去实现它,就会快很多了

1、Teach4Activity将presenter创建对象到Teach4Activity中,然后实现ITeach4View里面的接口方法
public class Teach4Activity extends Activity implements ITeach4View {    private Teach4Presenter presenter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_teach4);        presenter = new Teach4PresenterImpl(this);    }}

2、写Teach4PresenterImpl里的方法,将Activity里传过来的ITeach4View进行操作,并初始化Teach4Model
public class Teach4PresenterImpl implements Teach4Presenter {    private ITeach4View teach4View;    private Teach4Model teach4Model;    public Teach4PresenterImpl(ITeach4View teach4View) {        this.teach4View = teach4View;        teach4Model = new Teach4ModelImpl();    }}
3、实现Teach4ModelImpl里的业务逻辑
public class Teach4ModelImpl implements Teach4Model {    @Override    public void queryIpInfo(final String ip, Subscriber<ApiBean<IpBean>> subscriber) {    }}
4、将数据返回给Teach4PresenterImpl,然后更新ui
 @Override    public void queryIpInfo(String ip) {        Subscriber<ApiBean<IpBean>> mySubscriber = new Subscriber<ApiBean<IpBean>>() {            @Override            public void onCompleted() {            }            @Override            public void onError(Throwable e) {                teach4View.showError(e);            }            @Override            public void onNext(ApiBean<IpBean> apiBean) {                teach4View.showIpInfo(apiBean.data);            }        };        teach4Model.queryIpInfo(ip, mySubscriber);    }
5、实现Activity中所有的接口方法,完成mvp模式的开发
@Override    public void showIpInfo(IpBean ipBean) {        String ipInfo = String.format("这里是用MVP模式结合RxJava获取的数据,IP是:%s,我在%s%s%s", ipBean.ip, ipBean.country, ipBean.region, ipBean.city);        mIpInfoText.setText(ipInfo);    }    @Override    public void showError(Throwable e) {        String err = "很遗憾失败了,错误是:" + e.toString();        mIpInfoText.setText(err);    }


本轮教程到此结束,Retrofit是个很优秀的网络框架,希望会越来越多人喜欢上并用它,接下来有时间我会对Retrofit的源码进行讲解,谢谢大家

教程例子源码下载




1 0
原创粉丝点击