iOS学习iOS学习iOS Developer

iOS项目模块化(四)手机天猫

2016-12-24  本文已影响440人  wycandyy

原文链接:http://mobile.51cto.com/app-show-523490.htm


本文为作者在GMTC全球移动技术大会上的演讲整理成文。演讲PPT见:http://ppt.geekbang.org/slide/show/194
本文标题是解耦,聊解耦可以有很多方法,本文以架构进化为线索给各位分享手机天猫的解耦之路。我想,在手机天猫的成长过程中,一些形而上的思考和沉淀固然是对大家有参考价值的,而工具和方案则借鉴价值更大。所以本文会较少篇幅放在讲过程和原因,比较多篇幅放在讲工具和方案。

什么在推动进化

作为技术团队,我们升级技术架构有各种原因,而什么什么因素是最关键的,什么可以成为进化理由?

当然更重要的是如何去平衡快速升级技术架构的好奇心和恰好满足业务与团队要求这两件事。过度追求技术架构革新,过度追求新技术,不但不能给业务和团队带来推动作用,反而会造成灾难。所以,作为一个优秀的技术团队永远要权衡做或不做,多做或少做。

架构怎么进化

架构进化体现在哪些方面,作为一个技术团队我们要如何把架构进化落地?这个问题因项目而异,因团队而异,因方向而异。本文只介绍手机天猫在发展过程中,与解耦相关的进化历程。

开发模式升级

手机天猫团队从一个三端不到十个人的小团队,成长到现在一个接近两百人的大团队,后文详细描述开发模式经历了怎么样的变更?

  • 代码独立,先从形式上解耦
  • 独立代码工程化,为独立运行打下基础
  • 梳理依赖关系,独立工程可编译
  • 放弃源码依赖,提速集成编译

一路走来,一步一个脚印,最终实现完整的解耦。在这个过程中我们沉淀了不少的方法论和最佳实践,我想有两个工具是值得介绍的,下文详述。

解耦工具箱

工欲善其事,必先利其器。这句话每个人都在说,却不是每个人都能做到。一个具有工具文化的团队会在质量,效率各个方面都会有很大优势。
一个工程,从原始状态迅速膨胀到天猫现在的体量的,依赖关系之复杂,超乎想象。
在这个膨胀过程里,我把耦合分成三类:

  1. 界面耦合,就是用户操作流程里,从首页-到搜索-到详情-再进店,这些界面的跳转是硬编码的
  1. 依赖耦合,顾名思义,两个模块之间的有依赖,就是耦合
  2. 工程耦合,每个模块有自己的生命周期和运行时,每个模块在生产环境里又需要依赖主工程的运行时

Beehive(Beehive已经开源,可以在Github上看到源码:https://github.com/alibaba/BeeHive)
Beehive是一个运行时框架,主要解决依赖耦合和工程耦合。
说到耦合,体量如手机天猫这样的一个App,各种依赖关系必然非常复杂,模块与模块的耦合也必然千丝万缕。我们要做的并不是把这些依赖和耦合一一处理掉,而是进行梳理,把不合理的找出来,解决掉,让整个工程处在一个健康合理的依赖和耦合范围内。有问题的依赖基本有这样几种:

1.模块循环依赖
2.层间反向依赖
3.非强功能依赖

下图是一张依赖的示意图。

几条虚线的依赖关系是我认为有问题的依赖,而抽象出有问题的几个模块


引入Beehive后,依赖关系会把几条红线全部引向Beehive模块,而Beehive模块则是独立于各层之外的。

Beehive的原理是,每一个对外提供服务的模块,需要注册一个抽象接口到Beehive提供的Interfaces(接口池)。注意,在这个池子里只有抽象接口。
开发阶段,调用方依赖接口池中响应的接口,并以接口为参数,通过Beehive提供的工厂方法获取一个服务实例,这个实例可以正常进行服务。
运行时阶段,Beehive工厂方法根据服务的注册配置,构造服务实例。若:当前的运行环境没有依赖提供服务的模块,则返回空;若:当前运行环境依赖关系完整,则开始构造服务,并返回。

通过这样的方案,就可以实现模块间解耦。

统跳协议 & Rewrite引擎

统调协议是一个基于URL的跳转方案,配合Rewrite引擎实现全App调用解耦。此前苹果核有一篇文章详细介绍,这里我就不详述细节:
http://pingguohe.net/2015/11/24/Navigator-and-Rewrite.html

Beehive和统跳&Rewrite的区别

Beehive和统跳协议的目的都是解耦,然后二者所关注的重心不同。统跳主要为界面解耦服务,业务要求界面链路的强动态性;Beehive则为模块解耦,解决模块强依赖带来的开发阶段痛苦。
以上,就是我们在过去的几年里,整个手机天猫所经历的解耦过程。在这个过程里,我们有过很多思考,也踩了很多坑,当然也沉淀了很多好用的工具。希望接下来能有更多机会跟各位分享,也欢迎各位跟我们交流,互相学习。
手机天猫其它文章推荐:
不要写死!天猫App的动态化配置中心实践
天猫App A/B测试实践
安全模式:天猫App启动保护实践

上一篇下一篇

猜你喜欢

热点阅读