元件化、模組化、外掛化
模組化
模組化開發
將一個程式按照其功能做拆分,分成相互獨立的模組,以便於每個模組只包含與其功能相關的內容。模組我們相對熟悉,比如登入功能可以是一個模組,搜尋功能可以是一個模組,汽車的傳送機也可是一個模組。
元件式開發
基於可重用的目的,將一個大的軟體系統按照分離關注點的形式,拆分成多個獨立的元件,已較少耦合。
將一個app分成多個模組,每個模組都是一個元件(Module),開發的過程中我們可以讓這些元件相互依賴或者單獨除錯部分元件等,但是最終釋出的時候是將這些元件合併統一成一個apk,這就是元件化開發。
正常一個App中可以有多個module,但是一般只會有一個module是設定為application的,其他均設定為library,元件化開發就是要每個module都可以執行起來,因此在開發期間(Debug版本)每個module均設定為application,釋出時(Release版本)設定為libs再進行合併。
元件可以分為兩大類,一類是application元件,一類是libs元件,application元件是一個可執行的app。libs元件可以作為application的依賴,但是自身不可作為程式執行的存在。
模組化粒度更小,更側重於重用,而元件化粒度稍大於模組,更側重於業務解耦。
元件化想要解決的問題:
1. 實際業務變化非常快,但是工程之前的業務模組耦合度太高,牽一髮而動全身.
2. 對工程所做的任何修改都必須要編譯整個工程
3. 功能測試和系統測試每次都要進行.
4. 團隊協同開發存在較多的衝突.不得不花費更多的時間去溝通和協調,並且在開發過程中,任何一位成員沒辦法專注於自己的功能點,影響開發效率.
5. 不能靈活的對工程進行配置和組裝.比如今天產品經理說加上這個功能,明天又說去掉,後天在加上.
元件開發比較常見的問題是業務元件的相互引用:
為此我們可以通過路由/匯流排的方式去處理:
掛載到元件總線上的業務元件,都可以實現雙向通訊.而通訊協議和HTTP通訊協議類似,即基於URL的方式進行.
外掛化開發
Android應用程式的.Java檔案在編譯期會通過javac命令編譯成.class檔案,最後再把所有的.class檔案編譯成.dex檔案放在.apk包裡面。那麼動態載入就是在執行時把外掛apk直接載入到classloader裡面的技術。
關於程式碼載入,系統提供了DexClassLoader來載入外掛程式碼。開發者可以對每一個外掛分配一個DexClassLoader(這是目前最常見的一種方式),也可以動態得把外掛載入到當前執行環境的classloader中。
相對於元件化開發主要要解決的問題:
1. 宿主和外掛分開編譯
2. 併發開發
3. 動態更新外掛
4. 按需下載模組
5. 方法數或變數數爆棚
---------------------
作者:huhanghao
來源:CSDN
原文:https://blog.csdn.net/u011486491/article/details/70216666