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