iOS路由最佳选择是什么
背景
记得四年前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路由最佳选择是什么的更多相关文章
- 一步步构建iOS路由
什么是移动端路由层: 路由层的概念在服务端是指url请求的分层解析,将一个请求分发到对应的应用处理程序.移动端的路由层指的是将诸如App内页面访问.H5与App访问的访问请求和App间的访问请求,进行 ...
- 3星|《商业周刊中文版:2017商业人物(下)》:酒店才应该是出行住宿的最佳选择,Airbnb不是
商业周刊/中文版:2017商业人物(下) 对一些知名商业人物的访谈的合辑. 总体评价3星,有一些参考价值. 以下是本期一些内容的摘抄: 1:段永平是一位隐秘的亿万富豪,去年,他创立的智能手机姊妹品牌O ...
- Forrester:华为云容器是容器混合云最佳选择
近日,国际权威咨询机构Forrester发布<The Forrester New WaveTM: Public Cloud Enterprise Container Platforms, Q3 ...
- iOS路由详解
本文如题,路由详解,注定是一篇详细解释iOS路由原理及使用的文章,由于此时正在外地出差,无法详细一一写出,只能不定时的补充. 一.什么是iOS路由 路由一词来源于路由器,可以实现层级之间消息转发的功能 ...
- iOS开发——高级篇——iOS中如何选择delegate、通知、KVO(以及三者的区别)
在开发IOS应用的时候,我们会经常遇到一个常见的问题:在不过分耦合的前提下,controllers[B]怎么进行通信.在IOS应用不断的出现三种模式来实现这种通信:1委托delegation2通知 ...
- iOS中如何选择delegate、通知、KVO(以及三者的区别)
转载自:http://blog.csdn.net/dqjyong/article/details/7685933 在开发IOS应用的时候,我们会经常遇到一个常见的问题:在不过分耦合的前提下,contr ...
- RabbitMQ入门-路由-有选择的接受消息
比如一个日志系统,之前的处理方式呢,是各种类型(info,error,warning)的消息都发给订阅者,可是实际情况上不一定都需要.可能A需要error,其他的都不需要.那么就引入了今天的处理方式- ...
- iOS入门怎样选择Swift和objective-c
版权声明:本文为博主原创文章,未经博主同意不得转载.博主微信:lofocus https://blog.csdn.net/cuibo1123/article/details/28261795 学oc吧 ...
- RadioGroup实现类似ios的分段选择(UISegmentedControl)控件
在ios7中有一种扁平风格的控件叫做分段选择控件UISegmentedControl,控件分为一排,横放着几个被简单线条隔开的按钮,每次点击只能选择其中一个按钮,他类似于tabbar但是又稍微有点区别 ...
随机推荐
- 在同一台计算机中运行多个MySQL服务
目录 一.问题的来源 二.配置 1. 修改原来MySQL系统的my.ini文件 2. 修改注册表 3. 重新启动服务 4. 最终效果 一.问题的来源 这个学期里我需要修读<数据库系统>的课 ...
- MySQL——字符集
-- 字符集:是一个系统支持的所有抽象字符的集合 MySQL数据库的字符集(包括两个部分): 1.字符集:character 2.校对规则:collation MySQL中常见的字符集: utf8 l ...
- VS Code 搭建stm32开发环境
MCU免费开发环境 一般芯片厂家会提供各种开发IDE方案,通常其中就包括其自家的集成IDE,如: 意法半导体 STM32CubeIDE NXP Codewarrior TI CCS 另外也可以用ecl ...
- 命令行解析函数:getopt_long、getopt
一.前言 在学习一些项目代码时,尤其涉及到命令行传参的代码,经常遇到getopt相关的函数,对这一类函数可以说是既陌生又熟悉.陌生是因为不知道它是干啥的,熟悉呢,是因为经常遇到.于是乎在追踪了多天ip ...
- API:获取当前用户的公网IP
在vue项目根目录下" public " 文件夹中的index.html,也就是根节点所在的文件引入JS,vue项目中静态文件需要在这里引入,用 script 标签规避跨域 < ...
- 隐私安全设置:NET:ERR_CERT_AUTHORITY_INVALID message in Chrome.
背景 访问一个内部网站时,遇到下面的问题,导致网站不能打开:NET:ERR_CERT_AUTHORITY_INVALID message in Chrome.从错误信息来看,这是由于网站的证书问题导致 ...
- Datagird样式
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x=&qu ...
- Docker宿主机管理
不需要每次输入sudo 在当前用户的用户目录.bashrc中增加以下内容,此后使用docker命令时不需要每次都增加sudo. echo 'sudo usermod -aG docker $USER' ...
- 358 day09字节流、字符流
day09[字节流.字符流] 主要内容 IO流 字节流 字符流 异常处理 Properties 教学目标 [ ] 能够说出IO流的分类和功能 [ ] 能够使用字节输出流写出数据到文件 [ ] 能够使用 ...
- C++快速读入
使用C++的标准cin进行读入速度比较慢,尤其是在大数据的情况下,所以我们需要使用一种方法,按照字符读入,最后再"组装"成整数.由于字符读入比数字要快,所以这样做可以提高读入速度. ...