模塊化、插件化和組件化

模塊化、插件化和組件化的關係

項目發展到一定程度,隨着人員的增多,代碼越來越臃腫,這時候就必須進行模塊化的拆分。

在我看來,模塊化是一種指導理念,其核心思想就是分而治之、降低耦合。

在技術開發領域,模塊化是指分拆代碼,即當我們的代碼特別臃腫的時候,用模塊化將代碼分而治之、解耦分層。

具體到 android 領域,模塊化的具體實施方法分爲插件化和組件化。

 

 

 插件化和組件化的區別

一套完整的插件化或組件化都必須能夠實現單獨調試、集成編譯、數據傳輸、UI 跳轉、生命週期和代碼邊界這六大功能。插件化和組件化最重要而且是唯一的區別的就是:插件化可以動態增加和修改線上的模塊,組件化的動態能力相對較弱,只能對線上已有模塊進行動態的加載和卸載,不能新增和修改。

 

組件化和插件化的最大區別(應該也是唯一區別)就是組件化在運行時不具備動態添加和修改組件的功能,但是插件化是可以的;

與組件化的主要區別:

  • 形式上的區別,組件化的單位是module,插件化的單位是apk
  • 關注點不同,插件化更關注動態加載、熱更新、熱修復等‘插拔’技術。

 

如何實現組件化

要實現組件化,不論採用什麼樣的技術路徑,需要考慮的問題主要包括下面幾個:

  • 代碼解耦。如何將一個龐大的工程拆分成有機的整體?
  • 組件單獨運行。上面也講到了,每個組件都是一個完整的整體,如何讓其單獨運行和調試呢?
  • 數據傳遞。因爲每個組件都會給其他組件提供的服務,那麼主項目(Host)與組件、組件與組件之間如何傳遞數據?
  • UI跳轉。UI跳轉可以認爲是一種特殊的數據傳遞,在實現思路上有啥不同?
  • 組件的生命週期。我們的目標是可以做到對組件可以按需、動態的使用,因此就會涉及到組件加載、卸載和降維的生命週期。
  • 集成調試。在開發階段如何做到按需的編譯組件?一次調試中可能只有一兩個組件參與集成,這樣編譯的時間就會大大降低,提高開發效率。
  • 代碼隔離。組件之間的交互如果還是直接引用的話,那麼組件之間根本沒有做到解耦,如何從根本上避免組件之間的直接引用呢?也就是如何從根本上杜絕耦合的產生呢?只有做到這一點纔是徹底的組件化。
  • 因此在開發期間(Debug版本)每個module均設置爲application,發佈時(Release版本)設置爲libs再進行合併。

 

基本概念

使用IDE中的multiple module這個功能,我們很容易把代碼進行初步的拆分。在這裏我們對兩種module進行區分,

  • 一種是基礎庫library,這些代碼被其他組件直接引用。比如網絡庫module可以認爲是一個library。
  • 另一種我們稱之爲Component,這種module是一個完整的功能業務模塊。比如讀書或者分享module就是一個Component。

  爲了方便,我們統一把library稱之爲依賴庫,而把Component稱之爲組件,我們所講的組件化也主要是針對Component這種類型。而負責拼裝這些組件以形成一個完成app的module,一般我們稱之爲主項目、主module或者Host,方便起見我們也統一稱爲主項目。

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章