天天看點

Android工程架構設計:元件化一(了解)一.子產品化,元件化二.App中的子產品化群組件化架構設計

當項目發展到一定程度,随着人員的增多,代碼越來越臃腫,這時候就必須進行子產品化(元件化)的拆分。

一.子產品化,元件化

1.1.子產品化(module)

子產品化可以了解為“業務架構”或者“業務子產品”。是指當我們的代碼特别臃腫的時候,把項目裡同一類型的功能邏輯進行需求性的拆分、整合、封裝代碼,分而治之。目的在于隔離代碼,封裝業務,具有高内聚性。

子產品之間的依賴關系,可以通過路由器(推薦ARouter)實作子產品間的解耦。

子產品在整個架構體系中,位于中層業務架構層。子產品拆分屬于橫向分塊(登入,注冊,設定……)。

一句話:子產品是面向業務的,目的重在業務層解耦。

1.2.元件化(library)

元件化可以了解為把重複代碼提煉封裝成一個個元件開放提供功能服務。可以了解為“基礎庫”,“功能元件”。目的在于複用,解耦。app中的一切皆為元件,基本上分為:基礎功能元件,通用UI元件,基礎業務元件。

元件之間依賴較低,可獨立封裝。

元件在整個架構體系中,位于架構底層,被上層依賴。

一句話:元件是面向功能的,目的重在功能複用。

二.App中的子產品化群組件化架構設計

2.1.子產品 + 元件

在App項目群架構體系中,我們經常會建構一群 主app(也就是殼app),每個主app依賴一些按業務劃分的module,module之間禁止橫向依賴,每個module依賴一些具備各種功能且封裝好的library(aar,jar) ……

如是開發模式中,我們可以按照上述(1.1, 1.2)對元件化,子產品化的定義來做架構設計。那module就是我們的“業務子產品”,對module的劃分建立,也就是實施業務子產品化的過程;而library即“功能元件”。整個App架構體系如下:

Android工程架構設計:元件化一(了解)一.子產品化,元件化二.App中的子產品化群組件化架構設計

如圖所示:“子產品 + 元件”App架構可以劃分為:主app叢集,業務子產品(mudule),功能元件(通用UI元件,基礎功能元件,第三方元件)(庫)(Library)。

各橫向業務子產品之間完全獨立,嚴格禁止直接依賴。其間資料傳遞,UI跳轉等元件間通訊将以路由器的方式實作。

2.2.子產品 + 元件(更新)

在“功能元件”部分,“基礎功能元件”中往往會有一些和業務相關的功能需要獨立封裝複用,比如IM,Share(分享),支付,推送 …… 這些需求還不足以被劃分成獨立的“業務子產品”,顯得太大了,但是又跟業務需求息息相關,僅僅作為功能元件又顯得太小了,是以作者這裡把“功能元件”部分進一步細化為“業務功能元件”和“基礎元件”。

“業務功能元件”部分指一些和業務相關的功能,尚不足以“業務子產品”劃分,且需要獨立封裝達到複用效果。同時具有解耦和複用的需求。

“基礎元件”部分指與業務本身無關的功能元件,包括“通用UI”,“網絡架構”,“資料庫”,“第三方元件” ……,可以概括為 通用UI元件,基礎功能元件,第三方元件。

Android工程架構設計:元件化一(了解)一.子產品化,元件化二.App中的子產品化群組件化架構設計

如圖所示:“子產品 + 元件”更新版App架構可以劃分為:主app叢集,業務子產品(module),業務功能元件(IM,Share,Pay ……)(Component),功能元件(通用UI元件,基礎功能元件,第三方元件)(庫)(Library)。

即主App — > Module — > Component — > Library。

2.3.元件化

app中的一切皆為元件!!!在android 領域,子產品化的具體實施方法分為插件化群組件化。一套完整的插件化或元件化都必須能夠實作單獨調試、內建編譯、資料傳輸(接口 + 實作)、UI 跳轉(路由)、生命周期和代碼邊界這六大功能。插件化群組件化最重要而且是唯一的差別的就是:是否能動态增加或修改線上功能子產品。

抛開插件化不談(不同類型app動态變更需求不同,采用方式不同),在實際開發過程中,子產品化的拆分方式方法其實就是元件化,“業務子產品”以“業務元件”的方式實作(module以library的方式被殼app所依賴),逐漸淡化了子產品的概念,進而形成“元件化”架構體系:

Android工程架構設計:元件化一(了解)一.子產品化,元件化二.App中的子產品化群組件化架構設計

如圖所示:“元件化”App架構可以劃分為:主app叢集,業務元件(Component),功能元件(業務功能元件)(Component),基礎元件(通用UI元件,基礎功能元件,第三方元件)(庫)(Library)。逐層依賴,層間獨立(各橫向業務元件嚴禁直接依賴,徹底解耦。消息通訊,資料傳遞以Router實作)(各功能元件之間,基礎元件之間互相獨立)。元件化之後的App工程,代碼結構清晰明了,編譯時間縮短,開發和測試(元件單獨編譯測試,回歸測點更明确,更有針對性,工作量大大減少)工作更高效,充分實作代碼的高可複用和高可維護和高可擴充性。

2.4.元件通訊(ARouter)

App在劃分元件時,為了達到充分解耦和複用,橫向業務元件間嚴格禁止直接依賴,元件間消息通訊,資料傳遞以路由器(或者事件總線)的方式實作。Router作為單獨的一個業務子產品,被所有其他的業務子產品所依賴,包括主App。

Router主要負責:

(1)業務元件之間頁面跳轉

(2)業務元件之間資料傳遞

(3)互相調用業務元件對外開放的服務(業務服務,資料服務)

這裡推薦阿裡ARouter。

2.5.元件化實施過程

1.業務拆分。

2.元件化架構設計搭建。

3.元件級獨立開發,調試(底層library元件庫,上層業務層獨立業務功能元件)。

4.設計業務元件間通訊機制,對外提供資料傳遞服務

5.元件生命周期設定:加載,解除安裝,降維 ……

6.內建調試。

7.打包上線。

繼續閱讀