如何实践MVP+RxJava+Retrofit(1)

  为了准备春招,整理了some流行技术,大概是去年5,6月份开始在知乎上看到,后面了解到google早在github上开源了Android开发三种开发模式:MVC ,MVP,MVVM,其中关于这三种对于具体需求来说有不同变体。(吼吼~~有不对的地方请指出==)

  现在要介绍的是MVP+RxJava+Retrofit这种开发模式,那进入正题前,需要了解下前面的三个技术。别着急,一个一个来说?

  MVP模式介绍:

  很明显它与MVC模式只有一字之差,如果想快速了解一样东西,比较其特征是最好的方式了。接下来,从下面几方面来说明:

  在原理结构上看

   1MVC-通过控制层C读取视图层V的数据,控制用户输入,向模型层发送数据。其中,视图层根据模型数据创建。视图层与模型层存在强耦合。

   2MVP-视图层V通过P(Presenter)调用模型层M的返回数据返回给视图层V使用。视图层与模型层没有直接联系,降低耦合性,也有利于测试。

  在应用角度上看:MVC侧重业务逻辑简单,小项目,搭建项目比较快速,但不利于分层测试;而MVP的话侧重大中型的项目,业务逻辑复杂,搭建项目也快,业务逻辑清晰,利于测试。

  RxJava是啥?

  放上一段官网精辟的定义:一个在Java VM上使用可观测序列的异步的,事件的库程序。

  

   这个概念是不是云里雾里的?总结两个字功能概述:异步。那它和一般的handler与AsyncTask异步机制有啥不同?

   使用RXjava进行异步操作你会发现不管多复杂的逻辑,Rxjava都能清晰易懂的写出来。

   原理上来说:采用了设计模式观察者模式的变体,为什么这么讲?其实,一般的观察者模式是观察者时时看被观察者,如果被观察者出现符合条件动作,那么观察者立即做出反应。Rxjava采用订阅的方式,告诉被观察者:我需要你的某某状态,你要在它变化的时候通 知我。

   典型的例子是事件点击监听器 OnClickListener,先填上一段代码,很熟悉对吧。对设置 OnClickListener 来说, View 是被观察者, OnClickListener 是观察者,二者通过 setOnClickListener() 方法达成订阅关系,订阅之后用户点击按钮的瞬间,Android Framework 就会将点击事件发送给已经注册的 OnClickListener 。

 button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(),"button",Toast.LENGTH_LONG).show();
            }
        });
    RxJava 的观察者模式

   RxJava 有四个基本概念:Observable (可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer

   与传统观察者模式不同, RxJava 的事件回调方法除了普通事件 onNext() (相当于 onClick() / onEvent())之外,还定义了两个特殊的事件:onCompleted() 和 onError()

  • onCompleted(): 事件队列完结。RxJava 不仅把每个事件单独处理,还会把它们看做一个队列。RxJava 规定,当不会再有新的 onNext() 发出时,需要触发 onCompleted() 方法作为标志。
  • onError(): 事件队列异常。在事件处理过程中出异常时,onError() 会被触发,同时队列自动终止,不允许再有事件发出。
  • 在一个正确运行的事件序列中, onCompleted() 和 onError() 有且只有一个,并且是事件序列中的最后一个。需要注意的是,onCompleted() 和 onError() 二者也是互斥的,即在队列中调用了其中一个,就不应该再调用另一个。
  • RxJava 的观察者模式大致如下图:

    RxJava 的观察者模式

  关于Retrofit的用法

  Retrofit与okhttp共同出自于Square公司,Retrofit就是对okhttp做了一层封装。把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请求了,Retrofit采用Restful简洁的接口设计,让M层清晰访问数据,降低耦合度。

  开发工具使用AndroidStudio通过Gradle引入: 

compile 'com.squareup.retrofit2:retrofit:2.2.0'

需要注意:Retrofit 最低要求是 Java 7 或者 Android 2.3。

  参考:rxjava福利:  http://gank.io/post/560e15be2dca930e00da1083 

          retrofit用法: http://square.github.io/retrofit/#api-declaration

posted @ 2017-04-05 16:45  jianhuicode  阅读(273)  评论(0编辑  收藏  举报