组件化是一个老生常谈的涉及面很广的话题,即不是做好一件事而是做好一系列的事情才能达成;其中包含组件化框架在内的各架构层级、构建系统、依赖管理系统、以及配套的防劣化机制与规则规范。
本文主要基于百度App背景、目标和组件化历程来讲述保障并行开发和组件复用的手段,尽量避免过多发散到构建系统、依赖管理系统,以及组件化框架这样的具体子方向。组件化的重要性取决于应用规模、团队规模、产品技术目标;所述内容虽然是从iOS平台出发,但方法论与实现路径适用于大部分平台。
另外启动速度、体积等准入流程的约束;以及目标的多样性也是大型App复杂度来源因素;由背景产生的目标是天生的技术需求,除此之外,百度App在不同阶段有不同的产品技术目标。
这一时期,百度App浏览器角色较重,大家都在一个工程里开发,各业务和基础逻辑交错,没有边界,你中有我、我中有你;UI架构比较复杂,每个RD都要从App主入口开始看懂主流程代码,小心翼翼的开发。
这一时期的主要问题有:
虽然当时团队规模只有几十人,但已经意识到了组件化的重要性;接入业务逐步变多,同时也有部分技术组件对外输出的需求;这一阶段:
这一时期重点建设了组件化框架(Pyramid、SchemeRouter)与分发框架(RemoteConfig、PMS、预取分发),及数据拆分框架(CocoaSetting);进一步保障了各组件能做到逻辑、数据各有归属;
随着百度App组件化程度的提高,主工程逐步壳化,沉淀了大批通用服务;这一时期团队高速发展,加入了多仓库和构建系统的支撑(EasyBox)。
这一时期,组件化框架相对完善,各组件已能做到逻辑、资源、数据各有归属。主工程进一步被弱化;
中台化的大潮滚滚而来,除云端一体化复用外,对组件化也提出了其他的更高要求。共享组件库+构建系统(EasyBox)合力,已能达到矩阵产品组合输出能力。
自下而上的组件化建设
基础库要在无业务侵入的情况下经过一定程度的抽象到架构底层,二进制化实行组件负责人制度,并进行体系化建设避免上述问题。
所有三方库更新到最新发布版并二进制化避免业务侵入;差异部分明确修改点,通过运行时单独打补丁;对外输出时,明确这一点。
为避免各组件对共有逻辑、共有数据集中式处理,建立容器及分发机制来分发事件、数据、以及逻辑调用。
Pyramid组件化框架:
这里主要讲Pyramid框架的分发作用,Pyramid将系统事件分发给各子组件;
除此之外,组件化框架还有另外两个作用:
1)Pyramid框架组件间通信:adapter一对一方式解耦升级为一对多解耦;
2)它将组件间的强依赖转变为弱依赖,这让技术组件对外输出时,被依赖的组件具有某种程度的可替代性;
端能力:
分离SchemeRouter与SchemeHandler逻辑,SchemeRouter归属服务层组件化框架,SchemeHandler归属各组件;
由于Scheme参数不够明确清晰,在百度App中Scheme主要用于和H5的通信,较少用于页面路由;
配置分发服务:将集中解析并调用各业务处理逻辑改造为分发机制,并最终升级为云控服务;
数据拆分服务:配合配置分发服务,将数据拆分到各组件内部管理;
资源/预取分发服务:建立资源/预取分发服务;
框架容器:通过Tab导航容器、栈式导航容器将各控制器UI数据拆分到各子控制器、事件分发传递给各子控制器;
分发与隔离机制、容器机制是并行开发的重要保障。
多业务调用的低依赖组件去业务化抽象成通用服务:账号、分享、云控、统计、性能、AI等
建立组件模型,各业务模块快速组件化。
按照组件模型,确定业务的功能范围、逻辑与接口边界,快速组件化。
组件接口变更、依赖变更、Warning数变化都会记录通知相关负责人,这些在Tekes平台管理;敬请继续关注后续公众号文章;没有防劣化机制,填坑速度永远比不上挖坑速度;一人填坑的速度也永远比不上多人挖坑速度。
吴军博士在《文明之光》一书中评价希腊人对世界文明的贡献这样写到:近代自然科学的很多体系都是在古希腊时代奠定的,希腊人在学术研究上有别于东方文明之处不在于一两项科学发明和发现,而在于他们将自然科学各学科分门别类,对每一个学科都建立起一整套系统的体系,在此基础上,演绎或归纳出普遍规律性,即定理或定律,继而成为自然科学各个学科的基石和支柱。
虽然没有这样的高度,但对软件开发来讲,也有异曲同工的作用。
"自己"得来终觉浅,引用一段话作为结语,节选自《每个架构师都应该研究下康威定律》
架构的目标是用于管理复杂性、易变性和不确定性,以确保在长期的系统演化过程中,一部分架构的变化不会对架构的其它部分产生不必要的负面影响。这样做可以确保业务和研发效率的敏捷,让应用的易变部分能够频繁地变化,对应用的其它部分的影响尽可能的小。
每个架构师都应该研究下康威定律:
https://www.infoq.cn/article/every-architect-should-study-conway-law
3 Key Software Principles You Must Understand:
https://code.tutsplus.com/tutorials/3-key-software-principles-you-must-understand--net-25161
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8