×

使用Swfit重写Uber的好与坏

消耗积分:1 | 格式:rar | 大小:0.5 MB | 2017-09-28

分享资料个

  本文出自Uber移动架构和框架组负责人托马斯·阿特曼于2016年在湾区Swift峰会上的演讲,分享了使用Swfit重写Uber的好与坏。以下为译文:

  我是托马斯·阿特曼,目前是Uber移动架构和框架组负责人。Uber现在的用户量已经达到数百万,这么大的用户量,Uber是如何用框架实现的呢?

  Swift与百位工程师的故事——原因、架构、经验

  今天我想谈谈一百多名Uber工程师是如何使用Swift编程语言的,在上周三新发布的Rider App主应用程序全部都是用Swift语言重构的。接下来我的分享主要包括三个部分:选择Swift的原因、Uber新架构;重构经验。

  优步的开端——重构的原因

  这是整个移动团队四年前的样子(指向屏幕显示有三名工程师的照片),就是从那时开始,他们着手搭建了我们现在这套老应用的基础。老的应用程序已经稳定使用了四年,但由于移动开发团队的指数级的增长,这套架构的缺点也逐渐显示出来,基于这套老架构想做功能开发也变得越来越困难。由于跟不同团队之间共用了很多ViewController,所以每次也需要对其它的代码进行测试。老架构真正让我们感到崩溃的主要原因是它是由两位工程师写出来的,但是目前团队已经发展到了100多人。与此同时,那套产品本身的用户量也不大。我们已经在多个城市开始运行,产品滑块底部密集的问题也显示出来了,原因就是因为所有的团队都希望在他们所在的城市能够推出新的产品。我们也想对Rider App做一套全新的用户体验界面。基于上述的这些问题,其实归纳起来也就是目前那套应用的架构问题和用户体验界面的全新设计问题。未来不再是研究老架构然后去解决问题这种形式了,而是一切都从头开始。

  2015年做了很多纠正错误工作,试图去完善老的结构,但对Uber的全新设计,将会从根本上解决问题,到时会处于一个更安全的阶段,从头去重新设计也是最理想的一种解决问题的方式。

  重构架构的目标——稳定可靠并且支持未来发展

  基于这两个重构原因开始了新架构的研发。最基本的需求就是满足上述两个要求,保证四条核心流程的稳定,这基本上就意味着崩溃率处于最低级别。 如果您的应用程序没有崩溃,但用户仍然停留在某些屏幕上,显然这问题很重大,这会让用户觉得不可靠。

  我们当然也希望新开发的架构能够支持Uber接下来数年的发展,就像当时设计这套老架构的时候是为了满足过去这四年发展的想法是一样的。

  Swift成为了我们的选择

  为了实现上述的两个目标,我们选择了Swift。当时我们认为Swift是更加安全的,至少在设想里是的,然而实际生活中并没有人去验证这一点。

  我们认为编译器中的类型安全性会让问题更早的暴露出来,而不是等到产品上线以后再出现问题。

  而我们知道,从现在开始的这四年,Swift将会进入到一段黄金发展期,它将会成为苹果公司未来唯一一门大力推广的语言。

  时间线

  从今年年初开始启动的,在二月份的时候,我们当时还希望我们所做的事情是正确的,因为有一些工程师在以前的公司就花费了大量的时间去做重构的事,但最终都以失败告终。为了保证重构能成功,挑选出了几位核心工程师,让他们花了5个月的时间去研究老的架构,在这5个月的时间内,我们就只干这一件事:架构,框架,完成一些基础的工作,最终搭建了一套很完美的基础框架,所有人都是以这套基础框架为原型进行开发。

  6月,架构搭建好,开始让核心流团队开始使用。核心流打算采用一种新的uberX骑行或者是uberPOOL骑行,因此我们增加了20位工程师,花了两个月的时间去审查新的架构,确保我们提出来的东西与之前构建一款新产品的要求是吻合的。事实证明,与最开始的产品要求相比,的确遗漏了一些东西,比如在视图层,一旦工程师开始进行转换或者做一些复杂的视图操作,那么我们必须调整架构以满足他们的需求。但是过了两个月,我们取得了新的进展,我们不再需要对代码库进行大量迁移,并且把平台开放给了每一个人,如果他们需要的话,也可以移交他们的功能了。

  新架构

  新架构叫”Riblets”,它是由Router、Interaction、Builder、Presenter、View这几个核心组件构成的,这也是VIPER框架的一种思想。我们研究了VIPER、MVVM和MVC,最终提出的方案是在VIPER基础之上增加一些我们自己创新的元素在里面。最终目标就是将每个功能模块化,并且每一个模块可以独立的进行测试。Riblet框架里的每一个核心组件都有一个协议接口,所以开发者可以把每一个单元单独拿出来,对它进行充分的测试。Riblets框架里的每一个模块都会在树里面进行管理,因此没有状态机,取而代之的是一个状态树。状态树里面的每一个节点就是一个Riblet,新架构中的核心部分是基于业务逻辑的,而不是视图逻辑,并且所有的业务逻辑都是由本地决定的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !