github開源地址 github.com/beyondxia/m…git
在談什麼是組件化以前,咱們須要先了解什麼是業務模塊。那什麼是業務模塊呢,從研發角度來說,說白了,就是APP中一些功能相對較獨立的,又一個或一波人維護的,有獨立業務形態的代碼集合。配一張圖感覺一下^_^,購物模塊,會員模塊,電影模塊,酒店模塊等通常就能夠理解爲一個業務模塊。github
其實咱們的組件化就是針對業務模塊開展的,每一個業務都能成爲一個獨立的組件,能夠獨立開發,獨立編譯(甚至獨立運行和測試)。業務之間經過一系列的接口或協議做用通訊的橋樑,除此以後,你們互不關心,各業務獨立徹底隔離。架構
因爲每一個業務模塊的開發人員每每是不一樣的,試想一下,若是全部的模塊代碼都位於一個代碼倉,全部的模塊代碼都是耦合在一塊兒,沒有組件的概念,那麼:app
要實現組件化開發,主要要作兩件事:1. 首先須要業務間代碼解耦。2. 組件間通訊框架
按照組件化開發步驟,實現組件化首先要實現的是代碼間解耦,解耦的目的是讓業務間沒有任何代碼依賴,沒有代碼交叉調用,可是又要能作到解耦後的正常通訊和數據傳輸。
針對解耦,目前傳統的作法是接口暴露方式:業務模塊以接口或協議的方式暴露該模塊的方法和功能,主app啓動時(或適當的時機)註冊各個業務暴露的方法和功能,咱們也採用了相似的作法,架構圖以下:函數
每一個業務模塊以service的方式暴露本身的功能和接口給到中間服務層(位於業務層之下),服務層收集各個業務暴露的方法和接口,在應用啓動時(或適當的時機)註冊,其餘業務模塊向服務層獲取各個模塊暴露的服務, 如圖中紅色部分。 服務層維護一個HashMap存放雖有的服務,以下:組件化
建議每一個業務模塊註冊一個服務,固然,能夠根據業務的,一個模塊也能夠註冊多個服務:post
至此,咱們能夠經過增長中間服務層的方式,達到代碼解耦的目的。這也是目前業界解耦的經常使用方法。測試
業務隔離後,就須要一套通訊方式,使各業務能夠進行方便高效的通訊,其實通訊方式,莫過於如下三種:3d
至此,通訊方案介紹完成。