Xcode工程组件化之路(1)------ 组件间通信:中间件

2024-08-25 15:18

本文主要是介绍Xcode工程组件化之路(1)------ 组件间通信:中间件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.前言

    当项目越来越来庞大,参与编写的人员越来多,代码分支和接入产品越发复杂时,项目组件化成了不二选择,什么是项目组件化?笔者简略概述为,以pod库的形式将复杂的系统业务拆分成不同模块,进而隔离不同的业务功能,然后分发与不同人员负责开发和维护,降低系统代码耦合度,方便管理。概括地不全或有误,请大家指正。

     组件化有什么用呢?组件化最大的作用是隔离组件和功能。组件隔离是不同业务不会有直接的依赖,也就是说不会直接#import其他组件头文件,在编译时,各个组件是不耦合的,在进行开发调试测试各个时期时,可以单独进行,而不需要依赖其他功能模块,提高工作效率。

2.中间件的选取

     要实现组件化,不得不考虑的是组件间的通信问题,如果单纯pod第三方,然后在主工程中调用,其实是不需要中间件来转发组件间的通信的,但是项目组件化过程中,这是一个不得不做的功能。要实现不同组件间的通信,就需要一个消息转发的中间层,这个中间层就是中间件。

    

    中间件的作用就是减少各个业务的相互依赖关系。各个组件的通信都交由中间件做消息转发,解耦系统,增加项目工程的可管理性。

2.1 Router

    利用router路由的方式实现组件间的通信。用的比较多的就是MGJRouter、HHRouter和FFRouter。路由router实现的方法大致是在提供服务的组件中先注册block,然后在需要调用的方法组件中通过URL调用block,来达到消息转发的目的。

  MGJRouter是一个单例对象,在其内部维护着一个“URL -> Block”格式的注册表,通过这个注册表来保存服务方注册的Block,以及使调用方可以通过URL映射出Block,并通过MGJRouter对服务方发起调用。MGJRouter是所有组件的调度中心,负责所有组件的调用、切换、特殊处理等操作,可以用来处理一切组件间发生的关系。除了原生页面的解析外,还可以根据URL跳转H5页面。

- (void)demoFallback
{[MGJRouter registerURLPattern:@"mgj://" toHandler:^(NSDictionary *routerParameters) {[self appendLog:@"匹配到了 url,以下是相关信息"];[self appendLog:[NSString stringWithFormat:@"routerParameters:%@", routerParameters]];}];[MGJRouter registerURLPattern:@"mgj://foo/bar/none/exists" toHandler:^(NSDictionary *routerParameters) {[self appendLog:@"it should be triggered"];}];[MGJRouter openURL:@"mgj://foo/bar"];
}

    通过OpenURL:方法传入的URL参数,对详情页已经注册的Block方法发起调用。调用方式类似于Get请求,URL地址后面拼接参数。 

[MGJRouter openURL:@"mgj://detail?id=404"];

    也可以通过字典方式传参,MGJRouter提供了带有字典参数的方法,这样就可以传递非字符串之外的其他类型参数。

[MGJRouter openURL:@"mgj://detail?" withParam:@{@"id" : @"404"}];

     

+ (void)load
{DemoDetailViewController *detailViewController = [[DemoDetailViewController alloc] init];[DemoListViewController registerWithTitle:@"基本使用" handler:^UIViewCon

这篇关于Xcode工程组件化之路(1)------ 组件间通信:中间件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105912

相关文章

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

Linux中的进程间通信之匿名管道解读

《Linux中的进程间通信之匿名管道解读》:本文主要介绍Linux中的进程间通信之匿名管道解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基本概念二、管道1、温故知新2、实现方式3、匿名管道(一)管道中的四种情况(二)管道的特性总结一、基本概念我们知道多

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

kotlin中的行为组件及高级用法

《kotlin中的行为组件及高级用法》Jetpack中的四大行为组件:WorkManager、DataBinding、Coroutines和Lifecycle,分别解决了后台任务调度、数据驱动UI、异... 目录WorkManager工作原理最佳实践Data Binding工作原理进阶技巧Coroutine

linux本机进程间通信之UDS详解

《linux本机进程间通信之UDS详解》文章介绍了Unix域套接字(UDS)的使用方法,这是一种在同一台主机上不同进程间通信的方式,UDS支持三种套接字类型:SOCK_STREAM、SOCK_DGRA... 目录基础概念本机进程间通信socket实现AF_INET数据收发示意图AF_Unix数据收发流程图A

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

Vue3中的动态组件详解

《Vue3中的动态组件详解》本文介绍了Vue3中的动态组件,通过`component:is=动态组件名或组件对象/component`来实现根据条件动态渲染不同的组件,此外,还提到了使用`markRa... 目录vue3动态组件动态组件的基本使用第一种写法第二种写法性能优化解决方法总结Vue3动态组件动态