github開源地址 github.com/beyondxia/m…git
組件化的核心問題爲組件間的解耦,而解耦就不可避免的要面臨解決組件間的通訊問題,即通訊機制。按照通訊機制的維度來區分,能夠大體歸納爲以下兩種方案:協議通訊、接口通訊。兩者的基本實現原理以下。github
協議通訊典型的方式就是使用scheme的方式進行通訊。這種方式能夠將組件間的依賴下降至最小,甚至能夠徹底隔離。其核心思想爲:組件間按照特定的通訊協議進行數據傳遞,框架底層經過反射的方式進行服務方法的調用,從而實現進行組件間的通訊。bash
上面咱們介紹的協議通訊的設計到協議+反射,因爲反射會帶來的自然問題,如:性能、混淆、代碼可讀性、服務變動對調用者無感知等,因此咱們更傾向於接口下沉的實現方式。框架
那麼什麼是接口通訊呢,接口通訊方式也就是咱們前文所提的,經過接口下沉的方式進行模塊間的數據通訊,咱們的框架也是基於這種方式進行組件間交互的,具體作法以下:組件化
public interface ITrainTicketService {
String SERVICE_NAME = FFServiceConstants.SERVICE_TRAIN_TICKET;
TrainTicketNavigator navigator();
void registerJSHandlers(IBridgeFragment fragment);
int getTicketCount();
}
複製代碼
協議通訊的不足在上文中已簡單說明,這裏主要分析一下接口通訊機制的優缺點。 優勢:post
針對這幾個問題,咱們的modules框架給出了相應的解決方案,具體見下一篇性能