美文网首页
路由器来解耦合项目

路由器来解耦合项目

作者: wsj2012 | 来源:发表于2017-08-21 15:38 被阅读24次

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

    翻了一下别人的解决方案,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的组成:

    相关文章

      网友评论

          本文标题:路由器来解耦合项目

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