美文网首页
组件化细节

组件化细节

作者: paradisery | 来源:发表于2020-12-30 08:58 被阅读0次

中间件作用:

1、负责转发信息。
2、用runtime反射调用,让中间件解除对各个组件的依赖,同时又能调到各个组件暴露出来的方法。
总结:组件通过中间件通信,中间件通过 runtime 接口解耦。

实现:

1、利用JLRoutes,保存一个全局的map,key是url,value是对应存放的block数组,url和block都会常驻在内存中,当打开一个URL时,JLRoutes就可以遍历 , 这个全局的map,通过url来执行对应的block。
2、我们首先写一个AppDelegate+JLRouter的category拓展。在这里实现路由的注册。

- (void)addRouter { 
    [JLRoutes setVerboseLoggingEnabled:YES];
    //跳转指定界面
    [[JLRoutes globalRoutes] addRoute:Router_PushViewController handler:^BOOL(NSDictionary<NSString *,id> * _Nonnull parameters) {
        NSString *controller = parameters[@"controller"];
        UIViewController *currentVc = [self currentViewController];
        NSString *title = parameters[@"title"];
        UIViewController *vc = [[NSClassFromString(controller) alloc] init];
        [self paramToVc:vc param:parameters];
        vc.hidesBottomBarWhenPushed = YES;
        if (title) {
            vc.title = parameters[@"title"];
        }
        [currentVc.navigationController pushViewController:vc animated:YES];
        return YES;
    }];  
}

3、当注册完路由,就可以不用import,或者依赖,完成跳转。
4、然后运用runtime完成消息的转发。

/*! runtime 赋值 */
- (void)paramToVc:(UIViewController *) v param:(NSDictionary<NSString *,NSString *> *)parameters {
    //runtime将参数传递至需要跳转的控制器
    unsigned int outCount = 0;
    objc_property_t * properties = class_copyPropertyList(v.class , &outCount);
    for (int i = 0; i < outCount; i++) {
        objc_property_t property = properties[i];
        NSString *key = [NSString stringWithUTF8String:property_getName(property)];
        NSString *param = parameters[key];
        if (param != nil) {
            [v setValue:param forKey:key];
        }
    }
}

5、以上可看到,我们不在需要去import需要跳转的模块。也不需要知道跳转模块接收什么类型的数据。开发者只需要知道跳转模块叫什么。就可以完成跳转。 至此我们完成了中间件的实现。

模块设计原则

越底层的模块,应该越稳定,越抽象,越具有高复用度。

不要让稳定的模块依赖不稳定的模块, 减少依赖

提升模块的复用度,自完备性有时候要优于代码复用

每个模块只做好一件事情,不要让Common出现

按照你架构的层数从上到下依赖,不要出现下层模块依赖上层模块的现象,
业务模块之间也尽量不要耦合

相关文章

  • 组件化细节

    中间件作用: 1、负责转发信息。2、用runtime反射调用,让中间件解除对各个组件的依赖,同时又能调到各个组件暴...

  • Vue基础之router、vuex

    关于 这里只对组件化思想以及router和vuex作了简要介绍,以后的文章中会记录更多细节 一、组件化思想 组件化...

  • 【Vue4】组件使用的细节点

    组件使用的细节点,不是讲组件化,不是讲组件化,不是讲组件化。重要的事情说三遍,罒ω罒本来觉得这个自己看一遍就算了,...

  • 深入理解vue组件

    一、使用组件的细节点当使用table、select等标签时,组件标签化可能会有bug,此时应该使用 is 接受组件...

  • 封装组件-面向对象

    tab组件化tab组件化代码 图片曝光组件化图片曝光组件化代码 轮播组件化轮播组件化代码

  • 组件化究竟组什么东西,一文解释给你听

    这篇文章主要讲的是组件架构思想,不会讲具体的实现细节,看完你会对组件化有一个全面的了解! 为了方便理解,本文中组件...

  • 提高Android组件化协作效率--Jenkins+Artifa

    本篇只针对gradle外部配置做详细说明,诸如组件化,jenkins,artifactory等细节不做阐述 以我做...

  • Android组件化 - gradle配置(一)

    一、什么是组件化 什么是组件化呢? 组件化、插件化、模块化之间有什么区别呢? 组件化:每个组件都是独立的功能模块,...

  • Android:插件化

    插件化组件化 组件化与插件化的区别 组件化是Android自然提供的,例如分成lib,test组件。插件化是热更新...

  • iOS 组件化实战篇(私有库)

    前沿 本片文章主要讲解我们项目中为什么要组件化 组件化的好处 怎么使用组件化 怎么实现组件化 为什么要组件化 ...

网友评论

      本文标题:组件化细节

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