分享

MVVM,RxJava和Retrofit的一次实践

 fishpan_oliver 2017-04-28

每日推荐


之前后台有人问https相关的问题,推荐一篇文章:


标题:Android安全开发之安全使用HTTPS

http://www.cnblogs.com/alisecurity/p/5939336.html


该文对https的在Android端如何处理进行了详细的描述;并且阿里聚安全还有多篇安全相关的好文,如果有需要不妨关注一下。



本文作者


本文由haohao投稿。

haohao的博客地址:

http:///


1
概述


一次简单的实践作为对 MVVM 认识的总结。


效果预览


准备知识


(1)MVC



  • 视图层(View):用户界面。

  • 控制器层(Controller):业务逻辑

  • 模型层(Model):数据保存


  1. View 层传送指令到 Controller 层

  2. Controller 层完成业务逻辑后,要求 Model 层改变状态

  3. Model 层将新的数据发送到 View层,使用户得到反馈


缺陷:View 层和 Model 层是相互可知,耦合性大,像 Activity 或者 Fragment 既在 Controller 层,又在 View 层,造成工程的可扩展性可维护性非常差。


(2)MVP



在 MVP 设计模式中,Controller 层变成了 Presenter 层。


  1. MVP 模式各层之间的通信,都是双向的。

  2. View 层与 Model 层不直接发生联系,都通过 Presenter 层进行间接通信。

  3. Model 层与 Presenter 层,Presenter 层与 View 层之间通过接口建立联系。


采用 MVP 设计模式,Activity 与 Fragment 只位于 View 层。


MVP 的缺陷在于:由于我们使用了接口的方式去连接 View 层和 Presenter 层,这样就导致了特定场景下的一些问题,当你的页面逻辑很复杂的时候,你 View 层实现的接口会有很多,如果你的 App 中有很多个这样复杂的页面,维护接口的成本就会变的非常的大。


(3)MVVM


MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。

区别在于: View 层与 ViewModel 层通过DataBinding相互绑定,View 层的变动,自动反映在 ViewModel 层,反之亦然。


(4)RxJava


RxJava 在 GitHub 主页的介绍是:


https://github.com/ReactiveX/RxJava

RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.


一个在 Java VM 上使用可观测的序列来组成异步的、基于事件程序的库。

RxJava 本质上是一个异步操作库,是一个能让你用极其简洁的逻辑去处理繁琐复杂任务的异步事件库。

简而言之,RxJava 可以用几个关键字概括:简洁,队列化,异步。


(5)Retrofit


一个 Android 和 Java 上 HTTP 库(利用注解和 OKHttp 来实现和服务器的数据交互)。

Retrofit 基于 OKHttp 并引入注解,使用简单,易扩展,易维护。


https://github.com/square/retrofit

Retrofit 官方文档:

    http://square./retrofit/


(6)DataBinding



https://developer./topic/libraries/data-binding/index.html


在Google IO 2015 中,Google 在 support-v7 中新增了 Data Binding,使用 Data Binding可以直接在布局的 xml 中绑定布局与数据,从而简化代码,Android Data Binding是Android 的 MVVM 框架。因为 Data Binding 是包含在 support-v7 包里面的,所以可以向下兼容到最低 Android 2.1 (API level 7+).


2

实践


直接上代码。


依赖的第三方类库

compile 'io.reactivex:rxjava:1.1.0'compile 'io.reactivex:rxandroid:1.1.0'compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4'compile 'com.github.bumptech.glide:glide:3.7.0'

API

https://api.douban.com/v2/movie/top250?start=0&count=20


引入DataBinding

android {    ......    dataBinding {        enabled = true    }}


工程目录结构



(1)MVVM 之 View


MainActivity.java


getFragmentManager()    .beginTransaction()    .add(R.id.movie_fragment, MovieFragment.getInstance())    .commit();


activity_main.xml



MovieFragment.java




movie_fragment.xml



movie_item.xml



MovieAdapter.java



回调接口 CompletedListener.java

public interface CompletedListener {    void onCompleted();}


(2)MVVM 之 ViewModel


MainViewModel.java



MovieViewModel.java



(3)MVVM 之 Model


DouBanMovieService.java



RetrofitHelper.java



还有 entity 类,这里就不贴出来了。


详细源码:

https://github.com/githubhaohao/MVVMRxJavaRetrofitSample

ZZS

无论你是有 Java 基础希望学 Android 开发的程序员,还是想进一步提升能力的 Android 开发者,都可以在这个Udacity & Google 官方参与制作 的课程项目中找到适合自己的成长路径!



*独家硅谷技术课程

*行业领导者设计的实战项目

*一对一学习辅导

*名企颁发学习认证

*毕业直达滴滴面试


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多