永发信息网

饿了么移动APP的架构演进

答案:1  悬赏:0  手机版
解决时间 2021-02-12 01:36
饿了么移动APP的架构演进
最佳答案
在饿了么业务发展的早期,移动APP经历了从无到有的阶段。为了快速上线抢占市场,传统移动APP开发的MVC架构成了“短平快”思路的首选:

  MVC架构

  这种架构因简单清晰,容易开发而被大多数人所接受。

  在MVC的体系架构中,Controller层负责整个APP中主要逻辑功能的实现;Model层则负责数据结构的描述以及数据持久化的功能;而View层作为展现层负责渲染整个APP的UI。分工清晰,简洁明了。此外,这种系统架构在语言框架层就得到了Apple的支持,所以非常适用于APP的startup开发。

  然后,这种架构在开发的后期会由于其超高耦合性,造成Controller层庞大,而这也是一直被人们所诟病。最终的MVC都从Model-View-Controller走向了Massive-View-Controller的终点。

  2
  Module
  Decoupled

  “短平快”的MVC架构在早期可以满足饿了么移动APP的快速开发迭代,但是随着代码量的不断增加,臃肿的Controller层也在渐露头角;而业务上,饿了么移动APP也从单一APP发展为多APP齐头并进的格局。这时候,降低耦合,复用已有模块便成了架构的第一要务。

  架构中,模块复用的第一要求便是代码的功能组件化。组件化意味着拥有独立功能的代码从系统中进行抽象并剥离,再以“插件”的形式插回原有系统中。这样剥离出来的功能组件,便可以供其他APP使用,从而降低系统中模块与模块之间的耦合性;也同时提高了APP之间代码的复用性。

  饿了么移动对于组件有两种定义:公有组件和业务组件。公有组件指的是封装得比较好的一些SDK,包括一些第三方组件和自己内部使用的组件。如iOS中最著名的网络SDK AFNetworking,Android下OKHttp,都是这类组件的代表。业务组件,则定义为包含了一系列业务功能的整体,例如登录业务组件,注册业务组件,即为此类组件的典型代表。

  对于公有组件,饿了么移动采取了版本化的管理方式,而这在iOS和Android平台上早有比较成熟的解决方案。例如,对于iOS平台,CocoaPods基本上成为了代码组件化管理的标配;在Android平台上,Gradle也是非常成熟和稳健的方案。采用以上管理工具的另一个原因在于,对企业开发而言,代码也是一种商业机密。基于保密的目的,支持内网搭建私有服务器成为了必需。以上的管理工具都能够很好地支持这些操作。

  对于业务的组件化,我们采取了业务模块注册机制来达到解耦合的目的。每个业务模块对外提供相应的业务接口,同时在系统启动的时候向Excalibur系统注册自己模块的Scheme(Excalibur是饿了么移动用来保存Scheme与模块之间映射的系统,同时能根据Scheme进行Class反射返回)。 当其他业务模块对该业务模块有依赖时,从Excalibur系统中获取相关实例,并调用相应接口来实现调用,从而实现了业务模块之间的解耦目的。

  而在业务组件,即业务模块的内部,则可以根据不同开发人员的偏好,来实现不同的代码架构。如现在讨论得比较火的MVVM, MVP等,都可以在模块内部进行而不影响整体系统架构。

  这时候的架构看起来更像是这样:

  EMC架构

  E(Excalibur)M(Modules)C(Common)架构以高内聚、低耦合为主要的特点,以面向接口编程为出发点,降低了模块与模块之间的联系。

  该架构的另外一大好处则在于解决了不同系统版本的兼容性问题。这里以iOS平台下的WebView作为例子来进行说明。Apple从iOS8系统开始提供了一套更好的Web支持框架——WebKit,但在iOS7系统下却无法兼容,从而导致Crash。使用此类架构,可以在iOS7系统下仍然注册使用传统的WebView来渲染网页,而在iOS8及其以上系统注册WebKit来作为渲染网页的内核。既避免了Apple严格的审核机制,又达到了动态加载的目的。

  3Hybrid

  移动APP的开发有两种不同的路线,NativeAPP和Web APP。这两种路线的区别类似于PC时代开发应用程序时的C/S架构和 B/S架构。

  以上我们谈到的都属于典型的Native APP,即所有的程序都由本地组件渲染完成。这类APP优点是显而易见的,渲染速度快、用户体验好;缺点同时也十分突出:出现了错误一定要等待下一次用户进行APP更新才能够修复。

  Web APP的优点恰好就是Native APP的缺点所在,其页面全部采用H5撰写并存放在服务器端。每次进行页面渲染时都从服务器请求最新的页面。一旦页面有错误,服务器端进行更新便能立刻解决。不过其弊端也容易窥见:每次页面都需要请求服务器,造成渲染时等待时间过长,从而导致的用户体验不够完美,并且性能上较Native APP慢了1-2个数量级;与此同时还会导致更多的用户流量消耗。另一个缺点则在于,Web APP在移动端上调用本地的硬件设备存在一定的不便。不过这些弊端也都有相应的解决方案,如PhoneGap将网页提前打包在本地以减少网络的请求时间;同时也提供一系列的插件来访问本地的硬件设备。然而,尽管如此,其渲染速度上还是存在一定的差距。

  Hybrid APP则是综合了二者优缺点的解决方案。饿了么移动对于此二类APP的观点在于,纯粹展示性的模块会更适合使用Web页面来达到渲染的目的;而更多的数据操作性、动画渲染性的模块则更适合采用Native的方式。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
万能五笔要打空格为什么跳出文字
我要一个级高的CF号 最好2个金星
宣化区排水有限公司我想知道这个在什么地方
会声会影 x7怎么没有画中画滤镜
北岛与舒婷诗歌主要有什么区别?请以北岛的《
福建千里香馄饨·面邢台学院店我想知道这个在
桃笑村地址在什么地方,想过去办事
心理学研究的结果都是可靠的吗,为什么?
龙甸村地址有知道的么?有点事想过去
中国邮政储蓄银行网上银行每日限额几点更新
蔡官农机加油站在哪里啊,我有事要去这个地方
二十四节气是中国古代订立的一种用来指导农事
我的电脑属性怎么和别的电脑不一样?
14.5公斤等于多少磅?
84年五粮液酒中有悬浮物能喝吗
推荐资讯
【二柯被谁草了】写出下列成语的主人公1.图穷
西塘梦江南客栈朝南埭店在什么地方啊,我要过
我妈妈的户口在十多年前被注销了 请问现在还
求gummy的《不要再把我忘记》或《不要再忘记
童年映像儿童摄影馆地址在什么地方,想过去办
高速公路上有动物石像是什么意思
驾照培训报名处(江苏、上海)地址在什么地方,
尔父是什么意思
上海华山医院至龙华医院怎么走?打的要多少钱
东南大学运动场馆地址在什么地方,想过去办事
回娘家送10样礼都有什么?
怎么制作有颜色的糯米糍
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?