關(guān)于Android的模塊化開發(fā)

關(guān)于模塊化

關(guān)于模塊化就不過多介紹了飒箭,感興趣的可以看一下Android 模塊化探索與實踐安居客 Android 項目架構(gòu)演進這兩篇文章假夺,這兩篇文章是我認為寫的比較好的。現(xiàn)在我來主要閑聊一下模塊化開發(fā)中遇到的一些問題和自己總結(jié)的經(jīng)驗布讹。

遇到的問題

在看了很多關(guān)于模塊化開發(fā)的文章以及案列后瘾英,在公司的一個新項目中我開始嘗試模塊化的開發(fā)忌堂。把復雜的功能拆分成一個個的模塊。原以為會很順利拴曲,但在開發(fā)中卻遇到了很多文章上都沒有提過的問題争舞。以下是第一次使用模塊化開發(fā)中遇到的一些問題,這些問題雖然不是很嚴重的問題澈灼,但對于初次使用的人也會造成一些小小的困擾竞川,這里寫出來,供大家參考叁熔。

1.資源文件引用問題和實體類引用問題

按照思路委乌,每個模塊之間是獨立的,可以打包成一個app的荣回,那么每個模塊之間在開發(fā)階段就應該盡可能的獨立福澡。可是當一兩個模塊開發(fā)完成之后驹马,會發(fā)現(xiàn)每個模塊之間,都存在重復和冗余的資源文件除秀。比如糯累,這張圖片模塊A里有了,模塊B里也有册踩,但都是同一張泳姐。那么這個時候就有兩種解決方法。第一種:不管冗余的資源文件暂吉。第二種把A模塊和B模塊里的資源文件都刪了胖秒,把這個共同的資源文件放到他們都可以給訪問的BaseModule里∧降模可以看出阎肝,不管是哪種,都不盡如人意肮街。同理风题,實體類也是,實體類的主要問題是不同模塊之間的實體類很可能必須是要一樣的嫉父,這也是后期修改的需要沛硅。例如在劃分模塊的時候,不同模塊之間的實體類需要一樣绕辖,為了后期維護方便摇肌,只能采取上面所說的第二種方法。但就算付出了時間和精力讓架構(gòu)更清晰和健壯仪际,也會帶來第二個問題围小。

2.BaseModule過大

按照上面兩篇文章的說法昵骤,所有的模塊都會依賴于一個BaseModule,而我們的AppModule則只是這些其余Module的入口吩抓。如下圖所示:


這只是截取了一部分來顯示涉茧。我想說的是,為了能夠在不同模塊之間共用資源文件和實體類疹娶,我們不得不把很多東西放到BaseModule里伴栓,這會讓BaseModule越來越大∮杲龋或許有些人覺得這是正常的钳垮,但這會導致一些功能簡單,需要不斷復用的模塊無法依賴BaseModule额港。例如PayModule(支付模塊)饺窿,ShareModule(分享模塊)等需要在其他項目中可以直接拿來用的模塊,無法直接引用BaseModule里的一些實體移斩,或者封裝好的網(wǎng)絡請求方法肚医。因為如果一旦引用了,就必須把龐大的BaseModule帶上向瓷。違背了模塊化就是要讓一些模塊可以不斷復用的初衷肠套。

3.模塊之間的相互通訊的一些問題

使用AS的時候,是不允許互相依賴的猖任。比如我的appModule依賴了TicketModule你稚,那么TicketModule是不能依賴appModule的。那么當我想要從TicketModule中打開app中的某個Activity的時候朱躺,我是無法直接打開的刁赖。因為你拿不到appModule里的任何東西。所以這里你有兩種選擇长搀,使用隱式Intent或者使用路由框架宇弛。這里推薦一下阿里巴巴開源的路由框架ARouter,功能簡單但夠用源请。但這樣也是存在問題的涯肩。ARouter基于注解實現(xiàn),看上去十分方便簡潔巢钓。但很多時候你會不知道哪些地方你應該直接跳轉(zhuǎn)病苗,哪些地方應該使用路由。并且ARouter存在一個問題症汹,你用ARouter進行類似startActivityForResult的操作的時候硫朦,你當前Activity里的Fragment是接收不到onActivityResult的,需要自己去顯示調(diào)用fragment的onActivityResult背镇,原因在于requestCode那里咬展,感興趣的可以自己去看源碼泽裳,這里就不多提了∑破牛總結(jié)一下就是涮总,當你使用模塊化開發(fā),你不得不考慮模塊間的跳轉(zhuǎn)問題祷舀,而模塊間的跳轉(zhuǎn)問題又存在如何規(guī)范和框架本身的一些問題瀑梗。

一些自己的經(jīng)驗

在這里,分享一些自己的經(jīng)驗給即將或者已經(jīng)在使用模塊化開發(fā)的人

1.熟悉和理清項目

這也是最重要的裳扯,不單單是對項目的邏輯進行梳理抛丽,當拿到功能圖或者結(jié)構(gòu)圖時,除了注意項目的邏輯饰豺,還有其中的一些資源文件亿鲜,可能的實體類自己心中應該有一些把握,可以省去之后的很多麻煩冤吨。

2.對功能性強的模塊蒿柳,可以存在一些冗余

如上所說,例如PayModule(支付模塊)漩蟆,ShareModule(分享模塊)等垒探,雖然BaseModule里已經(jīng)封裝好了網(wǎng)絡請求的相關(guān)方法,但依然可以自己寫一些基礎的方法在這兩個模塊中爆安,雖然看似冗余,但可以讓這兩個模塊不依賴于龐大的BaseModule仔引,讓這兩個模塊真正的達到復用的目的扔仓。

3.規(guī)范模塊間跳轉(zhuǎn)的約定

多人開發(fā)的時候,應該在開發(fā)之前對模塊間的跳轉(zhuǎn)做一個約定咖耘,這樣可以省去后期很多的代碼維護和梳理的時間翘簇。以及在開發(fā)之初對跳轉(zhuǎn)方法的選型,應該結(jié)合項目來考慮儿倒,很多時候版保,隱式跳轉(zhuǎn)其實也夠用了。至于使不使用路由框架夫否,也應該結(jié)合項目本身來進行思考

最后彻犁,閑聊一下MVP以及MVVM

本篇博文開頭供大家參考的文章中多次提到了MVP,并把MVP作為模塊與模塊之間的約定和共性凰慈。要求每個模塊都應遵循MVP的開發(fā)規(guī)范汞幢。事實上在我的項目中我也選擇了MVP作為這個項目的主要開發(fā)模式。事實上MVP結(jié)合RXJAVA可以很好的仿制內(nèi)存泄漏微谓,以及MVP模式下森篷,很多接口和Presenter可以服用输钩。但很多人容易進入一個誤區(qū),即選擇了MVP就不應該再使用MVC或者MVVM仲智,我認為這是錯的买乃。MVP,MVC,MVVM都只是一種設計模式,本質(zhì)上都是讓代碼更容易維護钓辆。那么基于這樣的訴求剪验,就不應該過多的糾結(jié)于該用哪種。比如一個界面里有很多需要填寫的內(nèi)容岩馍,這個時候可以考慮使用mvvm碉咆。而一個界面如果有很復雜的邏輯交互和網(wǎng)絡請求,那么應該使用mvp模式蛀恩。而如果一個界面同時兼具以上兩種疫铜,那么一個界面可以同時使用mvp和mvvm也是可以的。填充數(shù)據(jù)使用mvvm而復雜的網(wǎng)絡請求使用mvp双谆】枪荆總結(jié)一下就是,不應該拘泥于設計模式顽馋,這會讓簡單的代碼變得復雜谓厘。

知無不言,言無不盡寸谜,言者無罪竟稳,聞者足戒

以上就是是我開發(fā)中遇到的問題和看法,供大家參考熊痴。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末他爸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子果善,更是在濱河造成了極大的恐慌诊笤,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巾陕,死亡現(xiàn)場離奇詭異讨跟,居然都是意外死亡,警方通過查閱死者的電腦和手機鄙煤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門晾匠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人梯刚,你說我怎么就攤上這事混聊。” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵句喜,是天一觀的道長预愤。 經(jīng)常有香客問我,道長咳胃,這世上最難降的妖魔是什么植康? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮展懈,結(jié)果婚禮上销睁,老公的妹妹穿的比我還像新娘。我一直安慰自己存崖,他們只是感情好冻记,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著来惧,像睡著了一般冗栗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上供搀,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天隅居,我揣著相機與錄音,去河邊找鬼葛虐。 笑死胎源,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的屿脐。 我是一名探鬼主播涕蚤,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼的诵!你這毒婦竟也來了万栅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤奢驯,失蹤者是張志新(化名)和其女友劉穎申钩,沒想到半個月后次绘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘪阁,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年邮偎,在試婚紗的時候發(fā)現(xiàn)自己被綠了管跺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡禾进,死狀恐怖豁跑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情泻云,我是刑警寧澤艇拍,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布狐蜕,位于F島的核電站,受9級特大地震影響卸夕,放射性物質(zhì)發(fā)生泄漏层释。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一快集、第九天 我趴在偏房一處隱蔽的房頂上張望贡羔。 院中可真熱鬧,春花似錦个初、人聲如沸乖寒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽楣嘁。三九已至,卻和暖如春覆获,著一層夾襖步出監(jiān)牢的瞬間马澈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工弄息, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留痊班,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓摹量,卻偏偏與公主長得像涤伐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子缨称,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容