美文网首页路由
iOS路由层设计简述

iOS路由层设计简述

作者: tom555cat | 来源:发表于2017-12-08 16:49 被阅读26次

摘要: 路由层解决的核心问题就是原来界面或者组件之间相互调用都必须相互依赖,需要导入目标的头文件、需要清楚目标对象的逻辑,而现在全部都通过路由中转,只依赖路由或者某种通讯协议,或者依靠一些消息传递机制连路由都不依赖。简单来说,路由层需要实现的基本功能就是一个模块只通过路由器就可以调度另一个模块。

相关工作

目前Limboy[L1] [L2]和Casa[C1]提出了两种影响比较大的路由层设计方案。从基本功能来看,Limboy[L1]在调用其他模块时,直接引用一个"MGJRouter.h"头文件就可以了;而Casa[C1]需要引用与目标模块相关的"CTMediator+分类.h"头文件。所以Casa[C1]的方案可能会引用较多的"CTMediator+分类.h"头文件,其实从iOS的分类的角度来看,引用一个类的多个分类头文件和引用一个类的头文件并没有太多区别。两种方案的调用关系都是星型网状图。所以从基本功能的角度来看,两者并没有差异。

从路由层的维护角度来看,Limboy[L1]的模块功能注册只考虑在+(void)load中注册,例如为一个UIViewController注册一个弹出自己的功能的示例代码如下所示:

+ (void)load {   
    [MGJRouter registerURLPattern:@"mgj://pushVC" toHandler:^(NSDictionary *routerParameters) {
        AnthoerViewController *vc = [AnthoerViewController sharedInstance];
        UINavigationController *navigationController = (UINavigationController *)[UIApplication sharedApplication].keyWindow.rootViewController;
        [navigationController.visibleViewController.navigationController pushViewController:vc animated:YES];
    }];
}

所以Limboy[L1]只需要在模块内部调用自己的方法来对外提供功能。Casa[C1]是通过实现提供功能模块的CTMediator分类来实现的,CTMediator的模块相关分类为了避免引用模块头文件,通过字符串硬编码来获取模块内部的方法名。方法名硬编码会给路由层内部的维护造成一定困难。所以从路由层维护方的角度来看,Limboy[L1]直接调用模块内部方法,而Casa[C1]是通过硬编码调用模块内部方法,所以Limboy[L1]的方法对路由层的维护者更为方便。

从路由层的使用者来看,Limboy[L1]是通过URL来使用模块提供的功能,URL带来的问题也就是硬编码的问题,同时使用者需要查看文档才能明白URL是提供了什么功能,需要传递哪些参数;而Casa[C1]在使用时只需要调用目标功能模块的CTMediator分类中提供的方法,可以方便地做到参数验证。

所以,Limboy[L1]将硬编码的困难留给了模块调用者,而Casa[C1]将硬编码的困难留给了模块维护者。这就需要技术团队自己权衡利弊。

参考文献

[L1]: 蘑菇街 App 的组件化之路

[L2]: 蘑菇街 App 的组件化之路·续

[C1]: iOS应用架构谈 组件化方案

相关文章

  • iOS路由层设计简述

    摘要: 路由层解决的核心问题就是原来界面或者组件之间相互调用都必须相互依赖,需要导入目标的头文件、需要清楚目标对象...

  • iOS网络层设计-Engine 实现

    iOS 网络层设计 iOS网络层设计-Client 实现 iOS网络层设计-Engine 实现 iOS 网络层 E...

  • iOS网络层设计-Client 实现

    iOS 网络层设计 iOS网络层设计-Client 实现 iOS网络层设计-Engine 实现 iOS 网络层 C...

  • iOS组件化路由的设计方案,用于组件化各业务模块的解耦

    目录 简述 设计结构NSURLComponent介绍路由对象存储设计方案类图结构补充 使用方式 路由性能评测 未来...

  • 谈谈 iOS 网络层设计

    谈谈 iOS 网络层设计 谈谈 iOS 网络层设计

  • 打车软件LBS核心架构 2018-04-04

    版本 总体设计 核心业务架构 IP:路由 客户端在使用长连接前,会调用路由服务,获取连接层IP,路由层特性:a. ...

  • iOS组件化-路由设计思路

    https://xiaozhuanlan.com/topic/1537824960 iOS开发路由设计思路

  • 移动端路由

    移动端路由层设计 什么是移动端路由层: 路由层的概念在服务端是指url请求的分层解析,将一个请求分发到对应的应用处...

  • iOS路由设计思路

    前言 iOS解耦方案大部分是通过路由,由此出现了各种不同的路由设计。在看过一些路由设计后,笔者对路由引发了一些思考...

  • iOS应用架构

    iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方案 iOS应用...

网友评论

    本文标题:iOS路由层设计简述

    本文链接:https://www.haomeiwen.com/subject/vlaeixtx.html