一種低侵入性的組件化方案 之 APP組件化簡介

github開源地址 github.com/beyondxia/m…git

1 、什麼是組件化

    在談什麼是組件化以前,咱們須要先了解什麼是業務模塊。那什麼是業務模塊呢,從研發角度來說,說白了,就是APP中一些功能相對較獨立的,又一個或一波人維護的,有獨立業務形態的代碼集合。配一張圖感覺一下^_^,購物模塊,會員模塊,電影模塊,酒店模塊等通常就能夠理解爲一個業務模塊。github

    其實咱們的組件化就是針對業務模塊開展的,每一個業務都能成爲一個獨立的組件,能夠獨立開發,獨立編譯(甚至獨立運行和測試)。業務之間經過一系列的接口或協議做用通訊的橋樑,除此以後,你們互不關心,各業務獨立徹底隔離。架構

2 、爲何要組件化

    因爲每一個業務模塊的開發人員每每是不一樣的,試想一下,若是全部的模塊代碼都位於一個代碼倉,全部的模塊代碼都是耦合在一塊兒,沒有組件的概念,那麼:app

  1. 開發效率必然會比較低,定位問題比較難
  2. 代碼修改風險高,一個模塊代碼的修改,可能會應用其餘模塊。
  3. 編譯時間久,哪怕只是一個模塊的修改,必須編譯整個應用。
  4. 代碼結構不清晰,架構不夠穩定,也不便於擴展和組件複用
  5. 等等

三、組件化開發步驟

    要實現組件化開發,主要要作兩件事:1. 首先須要業務間代碼解耦。2. 組件間通訊框架

四、實現方案

4.一、解耦

    按照組件化開發步驟,實現組件化首先要實現的是代碼間解耦,解耦的目的是讓業務間沒有任何代碼依賴,沒有代碼交叉調用,可是又要能作到解耦後的正常通訊和數據傳輸。
    針對解耦,目前傳統的作法是接口暴露方式:業務模塊以接口或協議的方式暴露該模塊的方法和功能,主app啓動時(或適當的時機)註冊各個業務暴露的方法和功能,咱們也採用了相似的作法,架構圖以下:函數

每一個業務模塊以service的方式暴露本身的功能和接口給到中間服務層(位於業務層之下),服務層收集各個業務暴露的方法和接口,在應用啓動時(或適當的時機)註冊,其餘業務模塊向服務層獲取各個模塊暴露的服務, 如圖中紅色部分。 服務層維護一個HashMap存放雖有的服務,以下:組件化

並提供註冊和獲取服務的方法:

建議每一個業務模塊註冊一個服務,固然,能夠根據業務的,一個模塊也能夠註冊多個服務:post

其餘業務模塊根據服務名獲取服務並調用服務暴露的方法:

至此,咱們能夠經過增長中間服務層的方式,達到代碼解耦的目的。這也是目前業界解耦的經常使用方法。測試

4.二、通訊方式

業務隔離後,就須要一套通訊方式,使各業務能夠進行方便高效的通訊,其實通訊方式,莫過於如下三種:3d

  • call(模塊間函數調用):每一個獨立的業務模塊暴露Service接口,供外界調用,如:
  • notify/publish(模塊間通知):每一個業務模塊註冊全局的感興趣的事件,事件產生後通知 ,可使用rxbus,通知,路由等方式,本文贊不對該項進行討論:
  • router(模塊間頁面跳轉):UI跳轉 ,統一使用路由方式,三端統一路由可使用Arouter,ActivityRouter等開源框架,本文暫不作討論.

至此,通訊方案介紹完成。

下一篇:一種低侵入性的組件化方案 之 組件化須要考慮的幾個問題

相關文章
相關標籤/搜索