路由器来解耦合项目

2017-08-21  本文已影响24人  wsj2012

项目随着版本不断的迭代,大多数类于类之间都会存在着依赖,这样会使项目很难来管理和维护,不同业务层很难抽出成独立的模块,非常影响之后的开发效率,因为代码中充斥着臃肿而复杂的业务代码,每个控制器层都会 依赖很多很多的文件。

翻了一下别人的解决方案,router 来解决我觉的挺好的。每个控制都注册在路由中心注册,参数以dic形式来传递,这样貌似就解决了控制层之间的相互依赖。那么怎么来设计router呢? 我们来简单看看这个SDRouter把

typedefvoid(^SDCompleteCallback)(SDRouterContext*context);

@interfaceSDRouter :NSObject

+ (instancetype)shareRutor;

- (void)addPaten:(NSString*)paten callback:(SDCompleteCallback)callback;

- (void)rutor:(NSURL*)paten;

@end

对外就两个方法 ,添加paten(每个控制器类生成的对应的paten),callBack 是 第二个方法 rutorL:要执行的代码块保存

+ (void)load {

[[SDRoutershareRutor]addPaten:OneControllercallback:^(SDRouterContext*context) {

NSLog(@"----: %@",context.paramters);

OneViewController*textOneVc = [[OneViewControlleralloc]init];

textOneVc.navigationItem.title= context.paramters[@"title"];

[context.topNavigationControllerpushViewController:textOneVcanimated:YES];

}];

}

控制器类在 load的时候就会被注册到路由中心。

实现原理:

用一个集合类缓存路由跟处理闭包的对应关系,在app启动的时候,注册好支持的URL,当调用openURL的时候,根据给定的URL查找到对应的闭包,执行闭包代码,实现跳转。找不到对应的闭包的时候,可以定义一个公共的错误页面。

那么路由可以解决什么问题呢?

跳转的时候不用依赖具体的目标类

从外部(web或者其他app,推送)打开App指定

App复杂后组件化后,组件解藕

统一买点可以通过路由进行,因为路由是一个中间件,所以对路由进行AOP就可以

做统一的错误处理页面

那缺点呢?

传参: 因为要传入的参数多样行,所以一般 以字典形式传入

URL的组成:

上一篇下一篇

猜你喜欢

热点阅读