背景

记得四年前iOS路由开始盛行,当时比较有名的是蘑菇街的,后来CTMediator写了几篇文章把蘑菇街批的体无完肤,导致我后来写新项目用了CTMediator,那一堆组件创建的叫一个酸爽啊!再后来陆续出现了HHRouter、JLRoutes等;面对这么多优秀的第三方路由,我们如何选择?是否需要重造轮子?

个人思考

无论是路由还是工程架构都需要根据实际项目来选择,比如你的工程就是小工程,然后还各种设计模式,这就会导致过度设计,本来一个小船就能搞定的事情你却动用了航空母舰;过度设计往往是一个业务研发过渡到架构师常犯的错误。对于大项目前期一定要考虑好架构,最少便于后期迭代,这时候选择什么路由以及基础组件怎么设计就关系到了未来道路是坎坷还是一帆风顺。

什么架构才适合自己的项目呢?以我的理解,中小型项目一定是使用cocoapod等组件管理工具来管理的,模块间低耦合是硬要求;一些第三方和独立的功能都用独立组件管理,一些上层逻辑可以暂时全部放主工程,后期能够逐渐优化;路由的选择可以是任何一个第三方,无论target-action还是protocol,能解耦够用即可;对于大型项目,主工程就应该是一个壳工程,只负责整个项目的配置和组件的配置,除了配置不应该有任何业务逻辑,路由的选择可以是自造轮子也可以使用优秀第三方,工程也一定是组件化;这种大型项目一般公司也是有实力的,有必要专门的架构组还处理架构的维护和运维,打造一套特有的CI/CD;甚至APS和APM系统也要打造一套,人员上配置也必然是后台、FE、安卓、iOS。

蘑菇街路由

这个路由思想比较经典,相关文章比较多,不做过多介绍

CTMediator路由 github上3.7K个星

本质上算不上是路由;路由思想的来源就是模仿web开发中的路由,路由一定是有URL的;网上基本没有提CTMediator缺点的,不知道是我用的不对还是咋地!CTMediator在使用的时候每个组件都还有一个中间组件作为中转(中间件),这样组件的个数就翻倍了,每修改一个组件接口,都需要重新发布俩组件!因此用于组件化的工程中,CTMediator至少有4个缺点:

1,导致组件个数翻倍

2,导致组件发布复杂

3,维护成本变大

4,基于runtime运行时,不支持Swift

竟然有面试题这么问:为什么CTMediator方案优于基于Router的方案?

我觉得这种问法就有点纸上谈兵了,没有实际操作过就来做对比

JLRoutes github 5.5k个星

本人没研究过这个路由,看关注度应该是目前最火的一个,而且一直有维护

阿里的BeeHive github 4.1k个星

本人没深入研究过这个路由,虽然是阿里的开源库,但是很少有公司去使用这个,更多是的学习研究,最主要的是最近四年来没有任何更新维护

总结

对于中小型项目,可以选择JLRoutes作为第一考虑对象,因为用的人多了,大家相互之间没有技术壁垒。对于大型项目,可以根据自己工程自造轮子,但一定是在研究了各种路由实现之后,考虑好路由应有的功能范围,然后开发一个更方便使用和适合公司文化的路由;使用单例对象调用url我们可以封装到object的分类中,这样调用会更加方便;另外可以根据项目结构,把跳转逻辑也定制化到路由中

更多技术文章以及iOS面试题解,请下载 iOS技术app 《逆天面经 》,每日背诵一个面试题,避免临时抱佛脚!

另外,iOS组件开发模板大全 《资源库》app,收集了五千多个iOS组件模板,让你的开发更简单!

iOS路由最佳选择是什么的更多相关文章

  1. 一步步构建iOS路由

    什么是移动端路由层: 路由层的概念在服务端是指url请求的分层解析,将一个请求分发到对应的应用处理程序.移动端的路由层指的是将诸如App内页面访问.H5与App访问的访问请求和App间的访问请求,进行 ...

  2. 3星|《商业周刊中文版:2017商业人物(下)》:酒店才应该是出行住宿的最佳选择,Airbnb不是

    商业周刊/中文版:2017商业人物(下) 对一些知名商业人物的访谈的合辑. 总体评价3星,有一些参考价值. 以下是本期一些内容的摘抄: 1:段永平是一位隐秘的亿万富豪,去年,他创立的智能手机姊妹品牌O ...

  3. Forrester:华为云容器是容器混合云最佳选择

    近日,国际权威咨询机构Forrester发布<The Forrester New WaveTM: Public Cloud Enterprise Container Platforms, Q3 ...

  4. iOS路由详解

    本文如题,路由详解,注定是一篇详细解释iOS路由原理及使用的文章,由于此时正在外地出差,无法详细一一写出,只能不定时的补充. 一.什么是iOS路由 路由一词来源于路由器,可以实现层级之间消息转发的功能 ...

  5. iOS开发——高级篇——iOS中如何选择delegate、通知、KVO(以及三者的区别)

      在开发IOS应用的时候,我们会经常遇到一个常见的问题:在不过分耦合的前提下,controllers[B]怎么进行通信.在IOS应用不断的出现三种模式来实现这种通信:1委托delegation2通知 ...

  6. iOS中如何选择delegate、通知、KVO(以及三者的区别)

    转载自:http://blog.csdn.net/dqjyong/article/details/7685933 在开发IOS应用的时候,我们会经常遇到一个常见的问题:在不过分耦合的前提下,contr ...

  7. RabbitMQ入门-路由-有选择的接受消息

    比如一个日志系统,之前的处理方式呢,是各种类型(info,error,warning)的消息都发给订阅者,可是实际情况上不一定都需要.可能A需要error,其他的都不需要.那么就引入了今天的处理方式- ...

  8. iOS入门怎样选择Swift和objective-c

    版权声明:本文为博主原创文章,未经博主同意不得转载.博主微信:lofocus https://blog.csdn.net/cuibo1123/article/details/28261795 学oc吧 ...

  9. RadioGroup实现类似ios的分段选择(UISegmentedControl)控件

    在ios7中有一种扁平风格的控件叫做分段选择控件UISegmentedControl,控件分为一排,横放着几个被简单线条隔开的按钮,每次点击只能选择其中一个按钮,他类似于tabbar但是又稍微有点区别 ...

随机推荐

  1. client-go实战之三:Clientset

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  2. SAR总结

    1.星载InSAR技术简介 星载合成孔径雷达干涉测量(InSAR)是一种用于大地测量和遥感的雷达技术.InSAR使用两个或多个SAR图像,利用返回卫星的波的相位差来计算目标地区的地形.地貌以及表面的微 ...

  3. vscode安装go插件失败

    解决办法:使用golang代理,在环境变量中添加两个新变量: 详情参考vscode中为golang开发环境配置代理goproxy 之后便有一部分可以安装成功

  4. 异步处理方式之信号(一):基础知识和signal函数说明

    文章目录 1. 引言 2. 信号的概念 2.1 信号操作之忽略信号 2.2 信号操作之捕捉信号 2.3 信号操作之执行系统默认操作 2.4 常见的信号 3. 函数signal 3.1 signal函数 ...

  5. python库--flashtext--大规模数据清洗利器

    flashtext.keyword (flashtext) 类/方法 返回值 参数 说明 .KeywordProcessor() 对象kp case_sensitive=False 是否区分大小写 添 ...

  6. shell脚本之循环语句 for-while-until

    目录: 一.for循环语句 二.while循环语句 三.unti循环语句   一.for循环语句 读取不同的变量值,用来逐个执行同一组命令 举例 批量添加用户◆ 用户名存放在users.txt文件中, ...

  7. find命令查找某一个时间点以后创建或者修改的文件

    touch -t 201711211615.47 starttouch -t 201711211617.47 end find ./* -newer start |xargs ls -al-rw-r- ...

  8. Windows Server 2022 OVF(SLIC 2.6)

    请访问原文链接:https://sysin.org/blog/windows-server-2022-ovf/,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:ww ...

  9. 字符串出现的topK问题

    /** * return topK string * @param strings string字符串一维数组 strings * @param k int整型 the k * @return str ...

  10. 01-mysql必知必会

    概述 主键:唯一区分表中每个行(不可重复,不允许null mysql:基于客户-服务器的数据库系统 使用mysql mysql是部署在主机上的,可以通过ssh建立mysql连接 # 显示数据库 sho ...