背景

记得四年前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. NCNN优化实时面部关键点检测

    效果图 演示手机为红米10X pro,可以实时跑人脸检测+关键点识别二个模型. 主要优化 上次看见有人讨论人脸检测与关键点识别,用的是opencv相关,于是想看下深度神经网络相关部分的进展,先选定了推 ...

  2. Mybatis-plus<二>通用CRUD,分页

    Mybatis-plus<二>通用CRUD,分页 与博客Mybatis-plus<一>为同一个Springboot项目. Demo GitHub下载地址:https://git ...

  3. hibernate01

    什么是hibernate ORM框架/持久层框架 jdbc的一个框架 object reference mapping 通过管理对象来改变数据库中的数据 通过管理对象来操作数据库 hibernate的 ...

  4. vue 路由视图,router-view嵌套跳转

    实现功能:制作一个登录页面,跳转到首页,首页包含菜单栏.顶部导航栏.主体,标准的后台网页格式.菜单栏点击不同菜单控制主体展示不同的组件(不同的页面). 配置router-view嵌套跳转需要准备两个主 ...

  5. DataGridView高度自动调整

    AutoResizeGrid.cs代码 /// <summary> /// 根据行数据,自动调整DataGridView高度 /// </summary> public sea ...

  6. vue2.0 前端框架

    在正式开始先复习一下js基础.因为vue最通终也要操作这些元素,vue和以前学的js并不挂勾,他和传统的jquert  设计理念相反 ## js 数据类型 1 基本类型 number  string  ...

  7. Electron-vue项目使用 Inno Setup 创建安装包

    1.安装 Inno Setup 官网:https://jrsoftware.org/isinfo.php 2.打开 Inno Setup ,点击如下图Compli32.exe(首次安装默认打开) 3. ...

  8. 第七章:网络优化与正则化(Part2)

    文章相关 1 第七章:网络优化与正则化(Part1) 2 第七章:网络优化与正则化(Part2) 7.3 参数初始化 神经网络的参数学习是一个非凸优化问题.当使用梯度下降法来进行优化网络参数时,参数初 ...

  9. HTML+CSS+JS设计注册页面

    HTML实战--设计一个个人信息填写界面 应用的技术:HTML+CSS+JS CSS和JS是套用的模板,主要练习了表单的验证和正则表达式的使用 效果图: 代码: <!DOCTYPE html&g ...

  10. RE Validation in JavaEE

    以下是关于RE校验的一些方法的基本功能: import java.util.regex.Pattern;<br> /** * 校验器:利用正则表达式校验邮箱.手机号等 * */<br ...