资讯专栏INFORMATION COLUMN

HHRouter 开源后日谈

Heier / 1331人阅读

摘要:颇有成就感,撰文一篇纪念,也顺便聊聊开源前后的一些事儿。当然,这并不是转职为后所做的无聊玩具。这不是单一的事件,而会是火花拥抱开源的一个开始。

这周二,火花开源了一个小项目 HHRouter,不到一周,已经获得不少关注。并且在 GitHub 的本日热门 Objective-C 项目榜中占据榜首连续两天,目前也在本周热门排列第四。尤其值得一提的是,关注者不仅有国内一线开发者,还包括 Twitter, Groupon, Airbnb 这类硅谷热门公司的工程师。

颇有成就感,撰文一篇纪念,也顺便聊聊 HHRouter 开源前后的一些事儿。

URL Router

HHRouter 背后的理念是 URL Router,这并不是新鲜的理念,早在数年前 Facebook 的 Three20 中就有类似的实现。但在 HHRouter 的传播过程中,我注意到还是有许多人对此并不了解。

一言以蔽之,URL Router 即将 UIViewController 映射成 URL,从而支持通过 URL 进行界面跳转。是的,就和 Web 一样。当然,这并不是 Web Developer 转职为 iOS Developer 后所做的无聊玩具。URL Router 有着许多切实的好处。

首先,这能够减少 UIViewController 之间的耦合。在没有 URL Router 的世界,如果 aViewController 需要跳转到 bViewController,就必须依赖于后者,这很容易就造成错综复杂的依赖链。引入 URL Router 后,这些链条自然就被斩断。

其次,当每个界面都拥有唯一且不重复的 URL ,将带来额外的好处。譬如,你将更容易实现这些需求:Push 打开指定的界面、追踪用户浏览记录、开放 URL Scheme。

再次,当你尝试引入 Hybrid 架构时,你会发现用统一语言描述 Web View 和 Native View 多么幸福。

HHRouter

刚才也有提到,URL Router 并不是新鲜的理念,那我们为什么重造一个轮子呢?

答案自然是对于现在的轮子不够满意。Three20 太臃肿自然不必再提,而其他 Router 也在设计或实现上有着不自然之处。

HHRouter 的设计哲学是 Clean, Fast & Flexible。

HHRouter 不依赖于其他库,自己实现了一套简单的 Mapping 算法,核心代码只有 60 行。算法虽简单,但也做过专门优化,不像某些 Router,每次寻址就是做一次完整的遍历...

HHRouter 避免做太多事情,譬如对于界面跳转的控制,每个 App 都可能存在差异,HHRouter 就干脆放手不管。正因为心无旁骛,只做 URL Mapping,才能专心把这件事做好,做到极致。譬如对 URL Query Params 的支持,以及对 App 自定义 URL Scheme 的支持。

Marketing

一些同学关心的问题是,HHRouter 是如何获得这么多关注的?

我在 Reddit, V2EX, Weibo, Twitter 上公布了 HHRouter 开源的消息,这带来了第一批的流量,让 HHRouter 进入了 GitHub Trending 页面,这又带来了后续的流量。

仅此而已,并非特地做过什么推广。问题的答案其实在前文就已提到。比起关心推广,不如将更多精力花在产品的定位与打磨。

Open Source

事实上,HHRouter 的主要代码都是在一年多前写的。此番只不过是做些整理。这不是单一的事件,而会是火花拥抱开源的一个开始。

为什么要拥抱开源?推荐阅读这篇《Open Source (Almost) Everything》,作者 Tom Preston-Werner 是 GitHub Co-Founder。

引用文中我特别青睐的一段:

  

When I start a new project, I assume it will eventually be open sourced (even if it"s unlikely). This mindset leads to effortless modularization. If you think about how other people outside your company might use your code, you become much less likely to bake in proprietary configuration details or tightly coupled interfaces. This, in turn, leads to cleaner, more maintainable code. Even internal code should pretend to be open source code.

无论如何,请期待火花的更多开源作品 :)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/15443.html

相关文章

  • 使用 Router 思想划分模块

    摘要:不管是天学会还是编程死象,基本上所有的编程入门书都会反复跟你讲强类聚,弱耦合,我理解模块划分中很容易发生模块之间耦合严重。 不管是《21天学会XXX》还是《Java编程死象》,基本上所有的编程入门书都会反复跟你讲「强类聚,弱耦合」,我理解模块划分中很容易发生模块之间耦合严重。你的代码运行依赖他的代码,然后他改了个接口你的代码就没法运行了。 所以... 模块要能独立编写、运行、测试...

    Youngdze 评论0 收藏0
  • PHP+Mysql高并发解决

    摘要:更多详情,请看原文章批量插入性能优化相关文章高并发简单解决方案队列缓存批量入库离线整合秒杀活动设计方案 在项目中,经常都会遇到高并发问题,如在某个时间点有100个人对同一数据进行更改,这样就会产生问题,最后导致的数据会不准确,通常的解决高并发的方法有读取数据时加缓存,写入数据时添加到队列,下面罗列一些处理高并发的常见方法供大家参考。 一、MySQL批量插入优化 对于一些数据量较大的系统...

    wuyangchun 评论0 收藏0
  • PHP+Mysql高并发解决

    摘要:更多详情,请看原文章批量插入性能优化相关文章高并发简单解决方案队列缓存批量入库离线整合秒杀活动设计方案 在项目中,经常都会遇到高并发问题,如在某个时间点有100个人对同一数据进行更改,这样就会产生问题,最后导致的数据会不准确,通常的解决高并发的方法有读取数据时加缓存,写入数据时添加到队列,下面罗列一些处理高并发的常见方法供大家参考。 一、MySQL批量插入优化 对于一些数据量较大的系统...

    plokmju88 评论0 收藏0
  • 创业公司或新项目如何做技术选型

    摘要:创业公司或新项目如何做技术选型一个创业公司或者新项目如何做技术选型个人认为一定要记住这个根本新项目最先要解决的就是原型核心业务落地验证商业模式。开源的最新的稳定的根据业务选定技术栈之后,尽量拥抱开源的东西。 创业公司或新项目如何做技术选型 一个创业公司或者新项目如何做技术选型?个人认为一定要记住这个根本:新项目最先要解决的就是原型核心业务落地验证商业模式。具体实践中,应当遵循以下原则和...

    mrli2016 评论0 收藏0
  • 当我们重构的时候我们想什么?

    摘要:等研发介入时,现场已经不复存在。因此,我要求戒律一凡是中间件,不管是自主研发的,还是以开源软件为内核构建出来的,都必须自带监控报警,否则不允许上线。 郑昀(公众号:老兵笔记) 20180411 showImg(https://segmentfault.com/img/bV8BWp?w=999&h=559); 如果你在繁忙的业务迭代中开始系统重构,恭喜你,说明你的业务已经完成了从0到1,...

    junbaor 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<