組件化(一)組件化簡介(基礎(chǔ)概念)

一、概念

將一個單一工程的項目,分解成各個獨立的組件;
然后按照某種方式 任意組成一個擁有完整業(yè)務(wù)邏輯的工程

可以理解為下圖所示


E9AE92823AAF075D980F8D66B6981697.png

每個組件都可以單獨抽離出來獨立運行
這就是組件的概念

二、組件化產(chǎn)生的原因

如果你的項目 業(yè)務(wù)模塊比較多 而且同時有很多人開發(fā) 在開發(fā)過程中肯定會出現(xiàn)一些問題 比如

1、代碼耦合度很高
//團(tuán)隊成員 方法相互引用

2、編譯效率低速度慢 
//因為工程模塊比較多編譯時每個模塊都會參與

3、測試不獨立
//你寫的代碼測出來問題 有可能不是你的問題 可能是其他開發(fā)人員的問題導(dǎo)致(測試環(huán)境復(fù)雜)

4、無法使用自己擅長的設(shè)計模式
//一個項目多人開發(fā) 如果所有代碼都在一起 肯定會有一個統(tǒng)一的設(shè)計模式  不然項目會很亂 

。。。。

反正就是 項目業(yè)務(wù)比較復(fù)雜時 多人開發(fā)會暴露出一系列的問題。
此時 如果每個人都負(fù)責(zé)編寫一個獨立的組件 就不會出現(xiàn)上述問題

三、組件化最終效果

1、組件獨立

獨立編寫 :可以使用自己擅長的方式別寫代碼
獨立編譯 :速度快
獨立運行 :速度快
獨立測試 :定位問題快 省去重復(fù)測試

2、一次封裝永久使用

如果你的其他項目中想要使用這個組件 直接引用即可

四、組件化實戰(zhàn)考慮的問題

1、需要把哪些內(nèi)容封裝成一個組件

一般分為三種 基礎(chǔ)組件、功能組件、業(yè)務(wù)組件

基礎(chǔ)組件
1、基本配置:如常量/變量、宏定義
2、分類:系統(tǒng)各個類的分類
3、網(wǎng)絡(luò):如對AFN的封裝、對SDWebImage的封裝...
4、工具:如 日期處理工具、文件處理工具、設(shè)備信息獲取工具...
...
功能組件
1、控件:如 輪播器、選項菜單、圖文菜單、彈幕...
2、功能:如 斷點續(xù)傳、音頻處理
...
業(yè)務(wù)組件
1、業(yè)務(wù)1
2、業(yè)務(wù)2
3、業(yè)務(wù)3
...
n、業(yè)務(wù)n

三者之間的關(guān)系
先看圖


5894832B47D6ADE4C667E6221F9CD0CE.png
1、最上層肯定是業(yè)務(wù)組件 ,然后基礎(chǔ)組件和功能組件同一級別
2、業(yè)務(wù)組件 可以依賴基礎(chǔ)組件 也可以依賴 功能組件
3、業(yè)務(wù)組件之間最好不要相互依賴 
原因是:降低業(yè)務(wù)組件之間的依賴 能夠方便的抽離出 各個組件  來達(dá)到解耦的目的
4、基礎(chǔ)組件和功能組件 最好也不要相互依賴 
原因是:降低業(yè)務(wù)組件之間的依賴 能夠方便的抽離出 各個組件  來達(dá)到解耦的目的

假設(shè) 功能組件  有一個小小的功能需要使用 基礎(chǔ)組件 那么他就需要去依賴(引用) 基礎(chǔ)組件
這樣一搞 在編譯的時候就會把基礎(chǔ)組件的所有小的組件給引用到功能組件中 
在編譯的時候基礎(chǔ)組件就會全部被編譯

還有就是 功能組件依賴基礎(chǔ)組件 將來再抽離功能組件的時候就無法單獨把功能組件抽離出來

解決這個問題  就是把功能組件里需要的基礎(chǔ)功能 從基礎(chǔ)組件中拷貝一份過來,雖然這樣麻煩了一些 但是能夠達(dá)到解耦的效果。

2、每個組件以什么樣的形式存在

1、組件內(nèi)部根據(jù)個人喜好劃分命名文件夾
2、每個組件都以pod庫的形式存在
3、擁有單獨的測試工程 每個組件可以單獨測試

3、以怎樣的形式集成各個組件

通過cocoapods來安轉(zhuǎn)各個組件

4、組件之間如何通訊

1、披露公開API
2、利用中間件 傳遞

五、組件化過程中的解耦

1、如果一個組件中依賴其他公共功能 該如何處理

1、直接copy代碼,雖然麻煩,但是他的好處就是快,無需產(chǎn)生依賴,
對于一些不重要的方法和工具也可以直接copy到內(nèi)部使用

2、把組件依賴的代碼 封裝成一個pod庫 然后依賴pod庫

2、組件內(nèi)部需要對接某個服務(wù) 該如何處理

如:圖文菜單組件的封裝 內(nèi)部有圖文加載
可以使用一個代理 或則block 把顯示圖片的代碼丟出去 讓外界來做處理
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 目錄介紹 1.0.0.1 說下Activity的生命周期?屏幕旋轉(zhuǎn)時生命周期?異常條件會調(diào)用什么方法? 1.0.0...
    楊充211閱讀 653評論 0 2
  • 組件:指的是單一的功能組件,如視頻組件(VideoSDK)、支付組件(PaySDK)、路由組件(Router)等。...
    秀葉寒冬閱讀 329評論 0 4
  • 原文地址:iOS 組件化方案 摘要:最近在思考團(tuán)隊擴張及項目數(shù)量增加的情況下,如何持續(xù)保障團(tuán)隊高效產(chǎn)出的問題,很自...
    prettystony閱讀 380評論 0 0
  • 去年就開始做組件化,沒啥活,就自己找的活兒,一套視頻看下來,理論知識有了,但是對著自家的項目,卻還是無從下手,所以...
    小如99閱讀 465評論 0 1
  • (一)概念 將一個單一工程的項目,分解成為各個獨立的組件,然后按照某種方式,任意組織成一個擁有完整業(yè)務(wù)邏輯的工具 ...
    沈正方閱讀 670評論 0 1

友情鏈接更多精彩內(nèi)容