服务化,URL和Route

背景介绍

  • 当前,在后台模块管理中,服务化,微服务化是大热门,是否可以借鉴到客户端的模块管理?

  • 页面之间跳转,之前没想这么细。不过iOS8之后,将framework引入工程管理,接口怎么定义?以前的dll的接口定义当然是五花八门,接下去的framework估计也会重蹈覆辙。能否参考后台服务化的思想,将URL引入,让各framework之间的关系更简单清晰呢?

  • Three20曾经很热,现在已经退潮,其中的基于URL的Route思想是有借鉴意义的

  • URL在互联网被广泛接受,还有W3C标准。现在后台模块的服务化改造,其中的信息传递也是基于URL格式的。在客户端是否可以借鉴?

  • routable-ios就是一个这样的第三方库。 Routable, an in-app URL router for iOS and Android这篇文章就是介绍这种思想的。

  • HHRouter这个star也上千了。HHRouter 开源后日谈这篇文章写得也不错。

  • URL本质是字符串,并且有公认的标准,可以让iOS和Android共同遵守。再加上JSON,就可以在网络和本地广泛互联互通了。这是跨平台的方向,比价有吸引力。

个人想法

  • 第一个场景是插件化,这个层面更多的是公司间的合作了。一个例子就是支付。主程序和插件之间,非常适合用URL这种模式来解耦。以前用过的银联支付插件,用代理模式返回支付结果,还要传一个ViewController作为参数,很不好用。用URL,参数放在query中,拉起支付插件,这个过程没有什么大的问题。插件处理完后,怎样把结果反馈给主程序?这个问题需要选合适的方法解决。URL中放Block,感觉不是非常优雅,目前还没看到令人信服的方案。用代理,还是用NSNotification?隔了个framework,估计也是个麻烦事。这方面需要进一步的思考。

  • 第二个场景是平台化。主平台和各业务模块之间,也是非常适合用URL来拉起各个业务模块的。业务部门之间,基本上隔离的需求大于信息交换的需求。这种场景也存在信息回传的问题,不过比插件化的场景频率要低一点。像支付宝,微信企业号之类的。主工程就是一个容器,为各业务提供一个入口,用URL,能跳到相应的应用就可以了,当然要能回来。而两个业务之间基本上只有隔离,要联系的话,也是放在后台,客户端由各自拉取接口更新界面就可以了。平台化要彻底,最好的方式是将主工程做成一个容器,甚至首页的内容都能通过后台动态配置。相关技术比如ReactNative(动态特性,并且性能比H5要好),首页要保持简洁,减少性能的坑。业务模块之间往隔离方向走,各自为政,互不干涉。平台尽量不要做具体的事,只做管理者和中转站。业务之间有沟通的需求,平台也提供一个专门的Bridge组件提供沟通机制,将影响限定在有限的范围之内。业务最好是独立APP的形式,业务之间的沟通,平台最好不要参与,让各业务之间自己解决。这种场景,也是适合用URL的模式来通信的。

  • 第三个场景是组件化。比如一个公司内部的产品,为了让业务部门更专注于各自业务,一些公共功能,做成公共组件,供各业务方调用。比如用户行为统计,日志,网络,缓存,加解密,手机信息等等。这种场景就是借用后台服务化的场景。最基础组件的可以叫微服务,只提供服务被调用,不调用其他模块(第三方库可以调用,比如AFNetworking)。一般这种组件,业务部门还不能直接使用。第二级的组件叫服务,能提供具体的服务给业务调用,同时自身也调用其他服务或者微服务实现具体功能。这些服务之间的调用是否可以采用URL的模式?现实情况是没有,比如著名的AFNetworking,FMDB等等,对外的接口还都是具体的API函数。不过,是否可以往URL与服务化的方向发展呢?比如网络库,以API的方式调用AFNetworking实现自己的网络通讯功能,同时以URL的方式对外提供服务,作为微服务组件。对于这种场景,iOS8、framework,提供了实现的方便条件,个人还是倾向framework之间用URL来通信。标准成熟,耦合低,字符串简单好理解。当然,目前还没看到具体的实现方案,也有很多未知的困难。

  • 最后一种场景就是页面之间的跳转了,这个已经有第三方库这么做了。对于这个级别引入URL,暂时还没有完全支持。有些页面之间耦合紧密的,比如,跳出一个页面修改下名字,保存后在上一个页面看到修改的结果。这里天然的需求是耦合而不是隔离。组件一旦framework化,天然已经有一堵墙,隔离的需求大于耦合。同时组件是为了复用,而页面往往是为了展示具体场景,是具体的使用者,并没有多少复用的需求。所以这两者有本质的区别。暂时,这种场景还没有URL化的强烈倾向。

参考文章

iOS页面跳转之Router Swift实现同事的文章,写得还不错,还有Demo例子Router

使用 Router 思想划分模块

Routable-iOS

iOS移动端架构的那些事

iOS界面跳转的一些优化方案

iOS App之间跳转

iOS两个App应用之间的跳转

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容