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框架给出了相应的解决方案,具体见下一篇性能