探讨一种Android快速开发的MVP模式

2019-12-10 09:48汤富彬
电脑知识与技术 2019年28期

汤富彬

摘要:随着安卓开发技术的成熟,Android技术选型模式也有很多,第三方库也层出不穷。笔者针对开发的用到的第三方库进行了整合,以到达快速开发的目的。当项目越庞大、复杂,参与的研发人员越来越多的时候,采用mvp模式的优势就明显起来,MVP模式(Model-View-Presenter)可以说是MVC模式(Model-View-Controller)在Android开发上的一种变种、进化模式。Mvp模式选用Kotlin语言作为开发语言该语言相比于Java语言的优势明显,Kotlin 有更强大的类型推断,也省去了末尾的省略号,各种方法的調用也更简单了。而且在Android中,有一个工具叫kotlin-android-extensions来帮助省略findViewByid的代码,直接使用在xml文件中写的id名字来获取控件的引用,使得代码的可读性的提高,也使代码更加简洁。

关键词:Kotlin;MVP框架;Android

中图分类号:TP311        文献标识码:A

文章编号:1009-3044(2019)28-0090-02

1 Android快速开发模式的语言选择

Android快速开发选用Kotlin作为开发语言该语言相比于Java语言有很大优势,Kotlin 有更强大的类型推断,也省去了末尾的省略号,各种方法的调用也更简单。而且在Android中,有一个工具叫kotlin-android-extensions来帮助省略findViewByid的代码,直接使用在xml文件中写的id名字来获取控件的引用,使得代码的可读性得到提高,也使得代码更加简洁。

Kotlin的空指针安全可控,空指针检查提前到了编译时,使程序的空指针得到了明显的改善。只是与java互相调用的时候,不太好检测,这是因为java的代码内不能检测返回的是否为空。因此在于java代码互相调用的时候需要特别注意。大致来讲,Kotlin的空指针安全还是会使程序得到良好的改善。

其次kotlin语言采用实用、整洁、高效率的程序输入,由于引入了object,更方便地创建单例。相比于java的单例,不需要考虑延迟初始化,同步的问题,在语言的层面上为提供了方便。引入data  class,创建实体数据类,避免了在去写getter、setting、toString等方法。引入了扩展方法,可以用来扩展已定义类型中的方法成员。

kotlin语言对Lambda和函数式编程更好的支持,Lambda表达式可以省去创建很多的匿名内部类。对函数式编程的友好支持,便于写出更加稳定的方法和代码。从客观上说,Kotlin的语法和特性让代码更具有描述性。而Kotlin的标准库和引入扩展方法加强了描述性。但是总的来说,代码的可读性还是靠编码人员的能力。

kotlin成为了Android的官方语言,得到官方的宣传和支持,对于我们来说,Kotlin版本的库和框架会越来越多,我们使用也会越来越方便。

2 使用MVP的架构模式来分离界面和数据处理

2.1 Mvp模式的优势

MVP相比于原来的MVC模式代码更简洁,特别说明的是简洁是逻辑的简洁,而不是代码本身。比如原来的MVC中,Activity 作为Controller会写很多与本身职责不一样的代码,会造成Activity之中逻辑混乱,而MVP中是把Activity作为View层,只负责了界面的展示,而把MVC中的Controller职责分离到了Persenter中去,使得逻辑更加清晰。

使用MVP可以分离View和Model的交互,在中间加入了一个Persenter层,使各自的职责更加清晰。为之后的维护减轻负担,因为可以改变其中的一层,而不影响其他的层次。更加方便单元测试,由于职责的清晰,可以单独的测试各个层面的代码。

2.2 使用RxJava+RxAndroid

使用这个框架的优势就是,可以处理并行的发送请求,使用灵活,线程切换简单,也不需要自己维护线程池,减少逻辑层次。目前也有很多的兼容RxJava的其他框架可以选择,比如:RxBinding、RxPermissions、RxBus、Retrofit。

2.3 选用Retrofit2.0作为网络框架,并集中的处理服务器返回的数据

目前主流的网络框架有Android-Async-Http、Volley、OkHttp3、Retrofit2.0。

其中Android-Async-Http 作者已停止维护,放弃。Volley不适用下载和上传文件的网络操作。适合轻量级网络交互,网络请求频繁,传输数据量小的场景。而Okhttp是一个封装类似HttpUrlConnection的一个东西,Android 4.4之后HttpUrlConnnection部分实现已经与Okhttp一致,证明了Okhttp的性能,主要的特点有:共享同一个socket来处理同一个服务器的所有请求,支持同步、异步请求,保存cookie到应用的sharepreference ,封装了线程池、数据转换、参数使用、错误处理等,无缝的支持GZIP来减少数据流量,使用比HttpUrlConnection更方便,缓存响应数据来较少重复的网络请求,能从很多常用的连接问题中自动恢复,解决了代理服务器问题和SSL握手失败问题,基于NIO和okio,所以性能更好,请求、处理速度快。Retrofit2.0是基于Okhttp的一个框架,具备了Okhhtp的所有优点,它可以通过注解配置请求,提供了Rxjava的支持。所以选用此框架的最好的选择。

2.4 使用AndroidUtilCode作为工具类

这个工具类目前在github上已有22k+的star,具有很强的集合性,此工具类包括缓存,图片,权限,文件,单位转换,编解码等等的集成,可以通过自身需要进行裁剪。基本上覆盖了开发过程中需要的各种工具类。

2.5 其他

选用Gson作为Json的解析框架。Json的解析框架主要有:Fastjson和Gson,就使用的方便性上来说,两大框架基本一致,Fastjson比Gson速度更快,但是由于Gson包的体积比Fastjson更小,而Retrofit2.0只支持Gson,所有选择Gson来作为json解析框架。选择RxPermissions框架来处理动态处理权限,由于Android自身的动态强求权限,过于复杂,不利于解耦。

3 快速开发mvp模式的搭建

首先著手于MVP模式基类BaseAcitivity、BasePresenter、和IBaseView的创建,其次创建网络的请求框架的设置类和根据具体的接口返回数据的统一处理,包装第三方框架,方便以后在项目中替换框架。具体代码如下:

总之,对于安卓快速开发的MVP模式,也可以称之为结构,国外普遍直接称为Android MVP,除此有的称为MVP Pattern或者MVP Framework/Architecture,笔者认为这应该算是一种代码风格(Code Style),在分类上应该比较类似设计模式(Design Pattern),Android常规的开发模式经常被称为MV模式(Model-View),引入数据绑定后的MVVM模式(Model-View-ViewModel)相比较,一个Activity可以包含一个以上的Presenter,MVP的主要特点就是把Activity里的许多逻辑都抽离到View和Presenter接口中去,并由具体的实现类来完成。这种写法虽然多了许多IView和Presenter,但是需要什么业务就new什么样的Presenter,方便灵活,在未找到替代mvp模式之前,mvp模式应用于快速开发andorid优势明显。

参考文献:

[1] 何红辉,关爱民.Android源码设计模式解析与实战[M].北京:人民邮电出版社,2015.

[2] 杨靖,洪蕾.MVP设计模式研究及在Android中的设计[J].科技创新导报,2016(34).

[3] 刘升贵.基于MVP模式的Android应用程序实现及其单元测试研究[J].福建电脑,2017(7).

[4] 郎志超.基于MVP模式的SAR图像融合系统设计与实现[J].机电工程,2010(1).

【通联编辑:唐一东】