在做Android軟件開發(fā)已經(jīng)4個(gè)年頭了,跟隨著Android一步一步成長,基于Android開源的特性,在開始工作的前幾年與大家一樣都樂于去折騰具體功能實(shí)現(xiàn),自定義View,網(wǎng)絡(luò)庫封裝。。等等,但是隨著Android的三方庫越發(fā)完善,同時(shí)產(chǎn)品需求的快速迭代,項(xiàng)目的飛速擴(kuò)展,為了能夠適應(yīng)這種高效的開發(fā)需求。等著大家的另一個(gè)問題就是android項(xiàng)目架構(gòu)的搭建。
那么在開始一個(gè)項(xiàng)目的架構(gòu)搭建,首先需討論的問題是:通過架構(gòu)能解決什么問題?,盡管會因?yàn)轫?xiàng)目的差異導(dǎo)致基礎(chǔ)架構(gòu)實(shí)現(xiàn)方式有所不同,但是任何架構(gòu)中都會遵循一系列的習(xí)慣原則:
框架獨(dú)立性
可測試
UI獨(dú)立性
數(shù)據(jù)庫獨(dú)立性
任何外部代理模塊的獨(dú)立性
基于以上,在團(tuán)隊(duì)開發(fā)中我們對于Android的項(xiàng)目架構(gòu)可以從三個(gè)層次去具體闡述:
1.路由模式(宏觀上實(shí)現(xiàn)功能模塊的解耦性,實(shí)現(xiàn)模塊化開發(fā))

圖畫的有點(diǎn)丑,將就看吧,表達(dá)的意思通過module層的外層搭建,實(shí)現(xiàn)模塊間解耦,進(jìn)一步達(dá)到可插拔,可測試,便維護(hù)的特點(diǎn)。
ps:router 是module間的耦合層
common module是提供各個(gè)module對外的接口和實(shí)體
2.Mvp編程模式(Module中實(shí)現(xiàn)數(shù)據(jù)(Data)與視圖層(View)之間的解耦)
網(wǎng)上文章一大堆,總結(jié)下來主要有下面幾個(gè)優(yōu)點(diǎn):
代碼解耦、結(jié)構(gòu)更清晰
更好的拓展性
可復(fù)用性
利于單元測試
優(yōu)點(diǎn)其實(shí)主要是相對傳統(tǒng)MVC結(jié)構(gòu)而言的,簡單對比下:
MVC(Model-View-Controller)
傳統(tǒng)MVC結(jié)構(gòu)中,C承擔(dān)著一個(gè)總控制器的作用,處理Model數(shù)據(jù),再控制View的顯示。
大部分時(shí)候Activity類就是這個(gè)角色,我們在Activity中調(diào)用接口,接口返回?cái)?shù)據(jù)后各種setText setImage顯示到UI上。
MVP(Model-View-Presenter)
重點(diǎn)在于Presenter,它其實(shí)是將Model和View分開了,在其中起到一個(gè)中轉(zhuǎn)站的角色。
把Model數(shù)據(jù)拿來一通處理,然后丟給View讓它自己去解決具體的UI顯示。
打個(gè)比方
如果處理Model處理業(yè)務(wù)邏輯就是加工食材做菜。把菜送到客戶手里呈現(xiàn)給客戶就是View的展示。
那MVC就是大排檔。C就是獨(dú)自運(yùn)營的老板,自己炒菜,做完再自己送到小桌子上的客戶面前,一條龍。
MVP就是正規(guī)大餐廳,P則是后廚中心,海綿寶寶做好蟹黃堡后放到窗口處,叮一下通知前臺好了可以送餐了,不用關(guān)心菜是怎么送到客戶手里的。然后由服務(wù)員章魚哥在窗口處取了餐,再或跑或跳或踩著轱轆鞋最后送到客戶手里,合作完成。
所以這里也可以看出來,MVP最重要的特點(diǎn)就是:
將 Model業(yè)務(wù)邏輯處理 和 View頁面處理 分開??!
3.Java的面向?qū)ο蟮脑瓌t(面對接口的編程,保證了業(yè)務(wù)層與實(shí)現(xiàn)層的分離,并且有很好的拓展性)
基于以上3點(diǎn)架構(gòu)開發(fā)的原則,相信對于具體的實(shí)現(xiàn)理解就非常的簡單了,閑來抽取了簡單的架構(gòu)和大家分享
項(xiàng)目地址:https://github.com/MyAndroidP/ZQFramework
1.baselibarary(基庫)
使用Dagger2實(shí)現(xiàn)依賴注入
使用RxJava配合Retrofit2做網(wǎng)絡(luò)請求
使用MVP架構(gòu)整個(gè)項(xiàng)目
使用Glide做圖片的處理和加載
使用RecyclerView實(shí)現(xiàn)下拉刷新、上拉加載(刷新使用Google原生swipe)使用
使用Realm做數(shù)據(jù)庫管理
2.H5module(功能模塊)
webview 輕量級的封裝
提供對外數(shù)據(jù)調(diào)用的接口
3.appmodule(耦合層)
功能模塊的整合