湯富彬
摘要:隨著安卓開發(fā)技術(shù)的成熟,Android技術(shù)選型模式也有很多,第三方庫也層出不窮。筆者針對開發(fā)的用到的第三方庫進(jìn)行了整合,以到達(dá)快速開發(fā)的目的。當(dāng)項目越龐大、復(fù)雜,參與的研發(fā)人員越來越多的時候,采用mvp模式的優(yōu)勢就明顯起來,MVP模式(Model-View-Presenter)可以說是MVC模式(Model-View-Controller)在Android開發(fā)上的一種變種、進(jìn)化模式。Mvp模式選用Kotlin語言作為開發(fā)語言該語言相比于Java語言的優(yōu)勢明顯,Kotlin 有更強(qiáng)大的類型推斷,也省去了末尾的省略號,各種方法的調(diào)用也更簡單了。而且在Android中,有一個工具叫kotlin-android-extensions來幫助省略findViewByid的代碼,直接使用在xml文件中寫的id名字來獲取控件的引用,使得代碼的可讀性的提高,也使代碼更加簡潔。
關(guān)鍵詞:Kotlin;MVP框架;Android
中圖分類號:TP311? ? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2019)28-0090-02
1 Android快速開發(fā)模式的語言選擇
Android快速開發(fā)選用Kotlin作為開發(fā)語言該語言相比于Java語言有很大優(yōu)勢,Kotlin 有更強(qiáng)大的類型推斷,也省去了末尾的省略號,各種方法的調(diào)用也更簡單。而且在Android中,有一個工具叫kotlin-android-extensions來幫助省略findViewByid的代碼,直接使用在xml文件中寫的id名字來獲取控件的引用,使得代碼的可讀性得到提高,也使得代碼更加簡潔。
Kotlin的空指針安全可控,空指針檢查提前到了編譯時,使程序的空指針得到了明顯的改善。只是與java互相調(diào)用的時候,不太好檢測,這是因為java的代碼內(nèi)不能檢測返回的是否為空。因此在于java代碼互相調(diào)用的時候需要特別注意。大致來講,Kotlin的空指針安全還是會使程序得到良好的改善。
其次kotlin語言采用實用、整潔、高效率的程序輸入,由于引入了object,更方便地創(chuàng)建單例。相比于java的單例,不需要考慮延遲初始化,同步的問題,在語言的層面上為提供了方便。引入data? class,創(chuàng)建實體數(shù)據(jù)類,避免了在去寫getter、setting、toString等方法。引入了擴(kuò)展方法,可以用來擴(kuò)展已定義類型中的方法成員。
kotlin語言對Lambda和函數(shù)式編程更好的支持,Lambda表達(dá)式可以省去創(chuàng)建很多的匿名內(nèi)部類。對函數(shù)式編程的友好支持,便于寫出更加穩(wěn)定的方法和代碼。從客觀上說,Kotlin的語法和特性讓代碼更具有描述性。而Kotlin的標(biāo)準(zhǔn)庫和引入擴(kuò)展方法加強(qiáng)了描述性。但是總的來說,代碼的可讀性還是靠編碼人員的能力。
kotlin成為了Android的官方語言,得到官方的宣傳和支持,對于我們來說,Kotlin版本的庫和框架會越來越多,我們使用也會越來越方便。
2 使用MVP的架構(gòu)模式來分離界面和數(shù)據(jù)處理
2.1 Mvp模式的優(yōu)勢
MVP相比于原來的MVC模式代碼更簡潔,特別說明的是簡潔是邏輯的簡潔,而不是代碼本身。比如原來的MVC中,Activity 作為Controller會寫很多與本身職責(zé)不一樣的代碼,會造成Activity之中邏輯混亂,而MVP中是把Activity作為View層,只負(fù)責(zé)了界面的展示,而把MVC中的Controller職責(zé)分離到了Persenter中去,使得邏輯更加清晰。
使用MVP可以分離View和Model的交互,在中間加入了一個Persenter層,使各自的職責(zé)更加清晰。為之后的維護(hù)減輕負(fù)擔(dān),因為可以改變其中的一層,而不影響其他的層次。更加方便單元測試,由于職責(zé)的清晰,可以單獨(dú)的測試各個層面的代碼。
2.2 使用RxJava+RxAndroid
使用這個框架的優(yōu)勢就是,可以處理并行的發(fā)送請求,使用靈活,線程切換簡單,也不需要自己維護(hù)線程池,減少邏輯層次。目前也有很多的兼容RxJava的其他框架可以選擇,比如:RxBinding、RxPermissions、RxBus、Retrofit。
2.3 選用Retrofit2.0作為網(wǎng)絡(luò)框架,并集中的處理服務(wù)器返回的數(shù)據(jù)
目前主流的網(wǎng)絡(luò)框架有Android-Async-Http、Volley、OkHttp3、Retrofit2.0。
其中Android-Async-Http 作者已停止維護(hù),放棄。Volley不適用下載和上傳文件的網(wǎng)絡(luò)操作。適合輕量級網(wǎng)絡(luò)交互,網(wǎng)絡(luò)請求頻繁,傳輸數(shù)據(jù)量小的場景。而Okhttp是一個封裝類似HttpUrlConnection的一個東西,Android 4.4之后HttpUrlConnnection部分實現(xiàn)已經(jīng)與Okhttp一致,證明了Okhttp的性能,主要的特點有:共享同一個socket來處理同一個服務(wù)器的所有請求,支持同步、異步請求,保存cookie到應(yīng)用的sharepreference ,封裝了線程池、數(shù)據(jù)轉(zhuǎn)換、參數(shù)使用、錯誤處理等,無縫的支持GZIP來減少數(shù)據(jù)流量,使用比HttpUrlConnection更方便,緩存響應(yīng)數(shù)據(jù)來較少重復(fù)的網(wǎng)絡(luò)請求,能從很多常用的連接問題中自動恢復(fù),解決了代理服務(wù)器問題和SSL握手失敗問題,基于NIO和okio,所以性能更好,請求、處理速度快。Retrofit2.0是基于Okhttp的一個框架,具備了Okhhtp的所有優(yōu)點,它可以通過注解配置請求,提供了Rxjava的支持。所以選用此框架的最好的選擇。
2.4 使用AndroidUtilCode作為工具類
這個工具類目前在github上已有22k+的star,具有很強(qiáng)的集合性,此工具類包括緩存,圖片,權(quán)限,文件,單位轉(zhuǎn)換,編解碼等等的集成,可以通過自身需要進(jìn)行裁剪。基本上覆蓋了開發(fā)過程中需要的各種工具類。
2.5 其他
選用Gson作為Json的解析框架。Json的解析框架主要有:Fastjson和Gson,就使用的方便性上來說,兩大框架基本一致,F(xiàn)astjson比Gson速度更快,但是由于Gson包的體積比Fastjson更小,而Retrofit2.0只支持Gson,所有選擇Gson來作為json解析框架。選擇RxPermissions框架來處理動態(tài)處理權(quán)限,由于Android自身的動態(tài)強(qiáng)求權(quán)限,過于復(fù)雜,不利于解耦。
3 快速開發(fā)mvp模式的搭建
首先著手于MVP模式基類BaseAcitivity、BasePresenter、和IBaseView的創(chuàng)建,其次創(chuàng)建網(wǎng)絡(luò)的請求框架的設(shè)置類和根據(jù)具體的接口返回數(shù)據(jù)的統(tǒng)一處理,包裝第三方框架,方便以后在項目中替換框架。具體代碼如下:
總之,對于安卓快速開發(fā)的MVP模式,也可以稱之為結(jié)構(gòu),國外普遍直接稱為Android MVP,除此有的稱為MVP Pattern或者M(jìn)VP Framework/Architecture,筆者認(rèn)為這應(yīng)該算是一種代碼風(fēng)格(Code Style),在分類上應(yīng)該比較類似設(shè)計模式(Design Pattern),Android常規(guī)的開發(fā)模式經(jīng)常被稱為MV模式(Model-View),引入數(shù)據(jù)綁定后的MVVM模式(Model-View-ViewModel)相比較,一個Activity可以包含一個以上的Presenter,MVP的主要特點就是把Activity里的許多邏輯都抽離到View和Presenter接口中去,并由具體的實現(xiàn)類來完成。這種寫法雖然多了許多IView和Presenter,但是需要什么業(yè)務(wù)就new什么樣的Presenter,方便靈活,在未找到替代mvp模式之前,mvp模式應(yīng)用于快速開發(fā)andorid優(yōu)勢明顯。
參考文獻(xiàn):
[1] 何紅輝,關(guān)愛民.Android源碼設(shè)計模式解析與實戰(zhàn)[M].北京:人民郵電出版社,2015.
[2] 楊靖,洪蕾.MVP設(shè)計模式研究及在Android中的設(shè)計[J].科技創(chuàng)新導(dǎo)報,2016(34).
[3] 劉升貴.基于MVP模式的Android應(yīng)用程序?qū)崿F(xiàn)及其單元測試研究[J].福建電腦,2017(7).
[4] 郎志超.基于MVP模式的SAR圖像融合系統(tǒng)設(shè)計與實現(xiàn)[J].機(jī)電工程,2010(1).
【通聯(lián)編輯:唐一東】