背景

记得四年前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. MySQL存储结构及SQL分类

    MySQL目录结构 bin -- mysql执行程序 docs -- 文档 share - 各国编码信息 data -- 存放mysql 数据文件 * 每个数据库 创建一个同名文件夹,.frm 存放t ...

  2. 看清Mysql执行计划的真面目

    ​  Explain语法 EXPLAIN SELECT -- 变体: 1. EXPLAIN EXTENDED SELECT -- 将执行计划"反编译"成SELECT语句,运行SHO ...

  3. 只需3步,快来用AI预测你爱的球队下一场能赢吗?

    摘要:作为球迷,我们有时候希望自己拥有预测未来的能力. 本文分享自华为云社区<用 AI 预测球赛结果只需三步,看看你爱的球队下一场能赢吗?>,作者:HWCloudAI. 还记得今年夏天的欧 ...

  4. golang中的闭包_closure

    闭包_Closure: 1.一般情况下,第一类对象都是独立的封闭的存在的,独立的封闭的起作用; 2.第一类对象可以被创建; 3.第一类对象可以作为参数传递给其他函数; 4.第一类对象可以赋值给变量实体 ...

  5. WPF listbox中Checkbox横向排列

    <ListBox Height="220" Margin="0" ItemsSource="{Binding RightCollection}& ...

  6. TS基础笔记

    TS优势 更好的错误的提示,开发中及时发现问题:编辑器语法提示更完善:类型声明可以看出数据结构的语义,可读性更好; TS环境搭建 1.安装node;2.npm install typescript@3 ...

  7. Nginx系列(6)- nginx: [error] CreateFile() "D:\nginx-1.20.1/logs/nginx.pid" failed (2: The system cannot find the file specified)

    背景 修改nginx配置文件nginx.conf后,想要重启nginx使配置生效.cmd进入nginx安装目录,输入命令: nginx -s reload 报错:nginx: [error] Crea ...

  8. chrome 的 options 参数

    在使用selenium浏览器渲染技术,爬取网站信息时,默认情况下就是一个普通的纯净的chrome浏览器,而我们平时在使用浏览器时,经常就添加一些插件,扩展,代理之类的应用.相对应的,当我们用chrom ...

  9. ci框架驱动器

    1.驱动器什么是 驱动器是一种特殊类型的类库,它有一个父类和任意多个子类.子类可以访问父类, 但不能访问兄弟类.在你的控制器中,驱动器为你的类库提供了 一种优雅的语法,从而不用将它们拆成很多离散的类. ...

  10. selenium下拉选择框处理

    HTML: (一)通过xpath层级标签定位 driver.find_element_by_xpath(".//*[@id='Resolution']/option[2]").cl ...