github开源地址 github.com/beyondxia/m…git
在谈什么是组件化以前,咱们须要先了解什么是业务模块。那什么是业务模块呢,从研发角度来说,说白了,就是APP中一些功能相对较独立的,又一个或一波人维护的,有独立业务形态的代码集合。配一张图感觉一下^_^,购物模块,会员模块,电影模块,酒店模块等通常就能够理解为一个业务模块。github
其实咱们的组件化就是针对业务模块开展的,每一个业务都能成为一个独立的组件,能够独立开发,独立编译(甚至独立运行和测试)。业务之间经过一系列的接口或协议做用通讯的桥梁,除此以后,你们互不关心,各业务独立彻底隔离。架构
因为每一个业务模块的开发人员每每是不一样的,试想一下,若是全部的模块代码都位于一个代码仓,全部的模块代码都是耦合在一块儿,没有组件的概念,那么:app
要实现组件化开发,主要要作两件事:1. 首先须要业务间代码解耦。2. 组件间通讯框架
按照组件化开发步骤,实现组件化首先要实现的是代码间解耦,解耦的目的是让业务间没有任何代码依赖,没有代码交叉调用,可是又要能作到解耦后的正常通讯和数据传输。
针对解耦,目前传统的作法是接口暴露方式:业务模块以接口或协议的方式暴露该模块的方法和功能,主app启动时(或适当的时机)注册各个业务暴露的方法和功能,咱们也采用了相似的作法,架构图以下:函数
每一个业务模块以service的方式暴露本身的功能和接口给到中间服务层(位于业务层之下),服务层收集各个业务暴露的方法和接口,在应用启动时(或适当的时机)注册,其余业务模块向服务层获取各个模块暴露的服务, 如图中红色部分。 服务层维护一个HashMap存放虽有的服务,以下:组件化
建议每一个业务模块注册一个服务,固然,能够根据业务的,一个模块也能够注册多个服务:post
至此,咱们能够经过增长中间服务层的方式,达到代码解耦的目的。这也是目前业界解耦的经常使用方法。测试
业务隔离后,就须要一套通讯方式,使各业务能够进行方便高效的通讯,其实通讯方式,莫过于如下三种:3d
至此,通讯方案介绍完成。