前言
從本篇起將展開一個組件化開發(fā)的系列蛾找,如果你打算在實際項目中使用組件化開發(fā)或者有志于向架構(gòu)師方向發(fā)展盾剩,希望本系列能對你有所幫助捡鱼。歡迎加入學(xué)習(xí)小組QQ群: 193765960而昨,我會不定期的給大家推薦優(yōu)質(zhì)的文章和話題帖旨。
版權(quán)歸作者所有,如有轉(zhuǎn)發(fā)彬呻,請注明文章出處:https://xiaodanchen.github.io/archives/
相關(guān)文章:
APP組件化開發(fā)之分層設(shè)計2
組件化概述
為什么需要組件化:
隨著時間的推移又或者歷史的原因衣陶,APP端的業(yè)務(wù)必然而然的會變得異常復(fù)雜,代碼之間耦合嚴(yán)重闸氮,正所謂牽一發(fā)而動全身剪况。再如果出現(xiàn)復(fù)雜業(yè)務(wù)多團隊協(xié)作的要求,那么APP組件化架構(gòu)和開發(fā)勢在必行蒲跨。
歷史上译断,APP的架構(gòu)大致經(jīng)歷了幾個過程:MVC(簡單業(yè)務(wù)) --> MVP/MVVM(單一業(yè)務(wù)視圖、業(yè)務(wù)或悲、數(shù)據(jù)解耦) --> 組件化/插件化(復(fù)雜業(yè)務(wù)系統(tǒng)孙咪,業(yè)務(wù)解耦)/跨平臺架構(gòu)。
什么是組件化:
由于我本人對組件化的理解也不深巡语,我只能以一種形而下的語句來描述一下我所理解的組件化翎蹈。其實針對組件化和插件化,我們確實沒太有必要糾結(jié)于精準(zhǔn)的描述和定義男公,不論什么樣的架構(gòu)和技術(shù)荤堪,其目的無非都是為了適應(yīng)復(fù)雜業(yè)務(wù)系統(tǒng)的解耦和快速迭代的需要,更重要的是這種深度解耦理澎、快速迭代逞力、簡單維護的理念。
就Android項目糠爬,良好的組件化框架允許將不同的業(yè)務(wù)或者功能單獨抽離封裝成獨立的sdk或liberary工程提供給其他的代碼使用寇荧,常見的jar包、AAR或者第三個的源碼庫等都是如此执隧,均可以劃分為組件的范疇揩抡。由一個打包工程(宿主app或叫殼工程)來統(tǒng)一集成各個業(yè)務(wù)和底層庫并進行打包發(fā)布。
組件化相對于MVC/MVP/MVVM等時整體與部分的關(guān)系镀琉。組件化是對APP層面的一個橫向功能縱向業(yè)務(wù)的拆解峦嗤。MVC/MVP/MVVM等則是針對單獨業(yè)務(wù)中各個視圖界面的視圖、邏輯和數(shù)據(jù)的處理方案屋摔。
組件化方案
架構(gòu)設(shè)計
以上為大致的一個組件化app結(jié)構(gòu)烁设,common library提供最基礎(chǔ)的app開發(fā)環(huán)境,即host只依賴common library的話就可以開始開發(fā)钓试。common library大致提供如下的能力:
如何快速構(gòu)建組件化框架
構(gòu)建一個合格的組件化開發(fā)系統(tǒng)要考慮以下因素:
1装黑,公共資源的復(fù)用:避免重復(fù)的打包和資源注入副瀑。
2,組件之間相互解耦
3恋谭,統(tǒng)一的業(yè)務(wù)組件開發(fā)框架
4糠睡,給自己留有退路,即如何快速的從組件化開發(fā)回退到單一工程的開發(fā)框架疚颊。
在此給大家推薦一下阿里手淘的組件化解決方案:atlas狈孔。
1,官方文檔:http://atlas.taobao.org/docs/principle-intro/Project_architectured.html
2材义,名詞解釋:
- bundle:類似于OSGI框架規(guī)范中的bundle:組件
- awb: 阿里手淘發(fā)明的一種文件格式; 類似于AAR均抽,區(qū)別在于每個awb都有一個對應(yīng)的packageID
- host: 宿主app
- tpatch: 增量更新的補丁包
3,構(gòu)建過程:
工程目錄示例:
總結(jié)
紙上得來終覺淺母截,絕知此事要躬行到忽。再好的理論也要實踐才有意義橄教,聽上去再牛逼的架構(gòu)也要適合自己才有價值清寇。希望此文能起到拋磚引玉的作用,給大家的下一步工作敲開一點點縫隙护蝶。
由于實際的因素华烟,文中無法對一些細(xì)節(jié)展開更詳細(xì)的描述,有興趣的同學(xué)可以加入學(xué)習(xí)小組QQ群: 193765960做進一步的討論持灰。
分享知識盔夜,傳遞價值,收獲快樂堤魁,與諸君共勉喂链。