轉自jessyan大佬的github:
https://github.com/JessYanCoding/ArmsComponent
關于組件化的架構我們做了從上至下的劃分陪每,分別為:
宿主層、業(yè)務層镰吵、基礎層奶稠。
1、宿主層
宿主層位于最上層, 主要作用是作為一個App殼, 將需要的模塊組裝成一個完整的App, 這一層可以管理整個App的生命周期(比如Application的初始化和各種組件以及三方庫的初始化)
2捡遍、業(yè)務層
業(yè)務層位于中層, 里面主要是根據業(yè)務需求和應用場景拆分過后的業(yè)務模塊, 每個模塊之間互不依賴, 但又可以相互交互, 比如一個商城App由搜索,訂單,購物車,支付等業(yè)務模塊組成。
當然竹握,每個業(yè)務模塊都可以擁有自己獨有的sdk依賴或UI資源画株,如有通用的 可以抽離到CommonSDK或CommonRes中由基礎層管理。
2.1 業(yè)務模塊的拆分
業(yè)務拆分之前需根據初期的產品需求到后期的運營規(guī)劃結合起來清晰的梳理一下業(yè)務在未來可能會發(fā)生的發(fā)展, 考慮業(yè)務劃分的維度啦辐,確定業(yè)務之間的邊界, 以及可能會發(fā)生的變化, 最后再確定下來真正需要拆分出來的業(yè)務模塊再進行拆分谓传。
3 基礎層
基礎層位于最底層,里面又包括核心基礎業(yè)務模塊、公共服務模塊芹关、基礎 SDK 模塊,核心基礎業(yè)務模塊和公共服務模塊主要為業(yè)務層的每個模塊服務,基礎 SDK续挟。
模塊含有各種功能強大的團隊自行封裝的SDK以及第三方SDK(列如網絡請求、圖片加載)侥衬。相當于整個機器的發(fā)動機诗祸,為整個平臺的基礎設施建設提供源源不斷的動力。
3.1 核心基礎業(yè)務
核心基礎業(yè)務為業(yè)務層的每個業(yè)務模塊提供一些與業(yè)務有關的基礎服務,整個項目都依賴于這一塊業(yè)務邏輯轴总,
比如在項目中以用戶角色分為 2 個端口, 用戶可以扮演多個角色, 但是在線上只能同時操作一個端口的業(yè)務,
這時每個端口都必須提供一個角色切換的功能, 以供用戶隨時在多個角色中切換,
這時在項目中就需要提供一個用于用戶自由切換角色的管理類作為核心基礎業(yè)務被這 2 個端口所依賴(類似 拉勾, Boss
直聘等App可以在招聘者和應聘者之間切換直颅、全日制的家長端、學生端怀樟、教師端的賬號角色切換功偿、或者學員切換)
核心基礎業(yè)務的劃分應該遵循是否為業(yè)務層大部分模塊都需要的基礎業(yè)務, 以及一些需要在各個業(yè)務模塊之間交互的業(yè)務, 都可以劃分為核心基礎業(yè)務
3.2 公共服務
公共服務是一個名為CommonService的Module, 主要的作用是用于業(yè)務層各個模塊之間的交互(自定義方法和類的調用), 包含自定義Service接口, 和可用于跨模塊傳遞的自定義類
主要流程是:
提供服務的業(yè)務模塊:
在公共服務(CommonService) 中聲明Service接口 (含有需要被調用的自定義方法), 然后在自己的模塊中實現這個Service接口, 再通過ARouter API暴露實現類
使用服務的業(yè)務模塊:
通過ARouter的API拿到這個Service接口(多態(tài)持有, 實際持有實現類), 即可調用Service接口中聲明的自定義方法, 這樣就可以達到模塊之間的交互
跨模塊傳遞的自定義類:
在公共服務中定義需要跨模塊傳遞的自定義類后
(Service中的自定義方法和EventBus中的事件實體類都可能需要用到自定義類), 就可以通過ARouter API,
在各個模塊的頁面之間跨模塊傳遞這個自定義對象
(ARouter要求在URL中使用Json參數傳遞自定義對象必須實現SerializationService接口)
最好在 CommonService 中給每個需要提供服務的業(yè)務模塊都建立一個單獨的包, 然后在這個包下放 Service 接口 和 需要跨模塊傳遞的自定義類, 這樣更好管理。
下一篇:組件化如何具體實現