您好,登錄后才能下訂單哦!
項(xiàng)目經(jīng)歷了歲月的洗禮,經(jīng)過公司業(yè)務(wù)上的變化,開發(fā)人員的來來往往,代碼越來越臃腫和復(fù)雜難懂,這時候就必須進(jìn)行拆分,否則就是一場災(zāi)難。就像我們公司的老項(xiàng)目一樣,耦合度極高,已經(jīng)停掉的業(yè)務(wù),現(xiàn)在還在項(xiàng)目里面留存著,完全不敢刪。新功能上線,因?yàn)橐貧w測試,測試時間有時候比開發(fā)時間還長。
組件化這個詞,我們應(yīng)該在各個地方,通過各種渠道,看到過無數(shù)次,而且一般會給配上下面這張圖,小機(jī)器人,綠油油的色彩,非常的鮮艷奪目有調(diào)性。
組件化和插件化同屬于模塊化編程,只是兩種不同的展現(xiàn)模式。兩者的區(qū)別,只有一個:插件化支持動態(tài)增加和修改線上的模塊,組件化只能對現(xiàn)有模塊進(jìn)行增加和刪除。
項(xiàng)目線上功能動態(tài)很頻繁的電商類APP,適合使用插件化。變動需求不強(qiáng)烈的工具類APP,適合采用組件化。我們公司對靈活性要求不高,因此采用組件化方案。
組件化的要點(diǎn)不算少,下面準(zhǔn)備就我認(rèn)為主要的部分,用提問和解答的方式,梳理大概的思路。
01.如何將一個龐大的工程拆分成有機(jī)的整體?
我認(rèn)為應(yīng)該分三個部分,主項(xiàng)目,基礎(chǔ)公共庫和業(yè)務(wù)組件。先抽出基礎(chǔ)公共庫,供其他組件調(diào)用,剩余部分按照業(yè)務(wù)邏輯去分組件,利于后期業(yè)務(wù)的迭代開發(fā),主項(xiàng)目負(fù)責(zé)裝載組件。
02.組件可以單獨(dú)運(yùn)行嗎?如何做到?
分離開的每個組件,都應(yīng)支持獨(dú)立運(yùn)行,這樣我們才能單獨(dú)在某個模塊開發(fā)和測試??梢酝ㄟ^ apply plugin: 'com.android.application' 和 apply plugin: 'com.android.library' 去實(shí)現(xiàn)兩個身份的轉(zhuǎn)換。
這里不要被圖給誤解到,組件化中的胳膊腿離開了身體,其實(shí)還是能獨(dú)立存活的個體。
03.如何做到組件與組件之間的獨(dú)立?
組件與組件之間相互獨(dú)立,才是降低耦合,主要表現(xiàn)在資源隔離和代碼隔離。代碼隔離可通過gradle3.0 之后 runtimeOnly 依賴語法實(shí)現(xiàn)編譯期隔離 。資源隔離,目前官方?jīng)]有現(xiàn)成的隔離方案,暫時可以先使用 resourcePrefix 屬性,人為維護(hù)。
04.組件之間互相獨(dú)立,數(shù)據(jù)如何傳遞?
考慮路由方案,目前已經(jīng)有很成熟的路由庫 ARouter。
除以上問題,還有組件的集成調(diào)試,組件生命周期等問題,我認(rèn)為前期可以先不考慮,留待后期優(yōu)化。
組件化改造的過程是非常痛苦的,但是完成后的開發(fā)體驗(yàn)真的超超超超幸福!因?yàn)闃I(yè)務(wù)模塊邏輯分離,代碼耦合度降低,所以會帶來以下好處:
編譯時間短
開發(fā)周期降低
減少測試回歸
快速定位問題
業(yè)務(wù)模塊遷移很方便
下面是我司項(xiàng)目組件化過程中的解耦的業(yè)務(wù)模塊:
<
Android 綠色小機(jī)器人坐成兩排,十分乖巧可愛。
第一步,少年,你需要自行去搜索獲取關(guān)于組件化的知識,在腦海中有它有個清楚的認(rèn)識。
第二步,針對你的目標(biāo)項(xiàng)目,梳理整體的業(yè)務(wù)邏輯和代碼架構(gòu),做出可行的組件化方案。這一步非常重要,必須提前探好底,讓更多的問題暴露在執(zhí)行前。不然,想象下,你一個模塊感覺都要挪過來80%了,發(fā)現(xiàn)業(yè)務(wù)邏輯上分離不開,或者技術(shù)上實(shí)現(xiàn)有障礙,這就很浪費(fèi)時間和精力了,還影響心情。
第三步,方案遞交給技術(shù) leader ,同意之后,申請排期開發(fā)。
第四步,沐浴焚香,拜好代碼大神,就開始吧。
友情提示,最好單獨(dú)拉一個新分支,因?yàn)檫@非常可能持久戰(zhàn),不要因此影響了項(xiàng)目的正常迭代。
抽出基礎(chǔ)工具類 BaseLib,網(wǎng)絡(luò)封裝庫 NetWorkLib。
抽出基礎(chǔ)資源庫 BasicRes,管理公共資源,例如 BaseActivity/BaseApplication 等基類們,對話框,res資源。
分離業(yè)務(wù)邏輯,獨(dú)立為 Module。
選定 Arouter 作為路由方案,連接各組件 Module。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。