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

相关文章

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

PyQt6中QMainWindow组件的使用详解

《PyQt6中QMainWindow组件的使用详解》QMainWindow是PyQt6中用于构建桌面应用程序的基础组件,本文主要介绍了PyQt6中QMainWindow组件的使用,具有一定的参考价值,... 目录1. QMainWindow 组php件概述2. 使用 QMainWindow3. QMainW

MyBatisX逆向工程的实现示例

《MyBatisX逆向工程的实现示例》本文主要介绍了MyBatisX逆向工程的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录逆向工程准备好数据库、表安装MyBATisX插件项目连接数据库引入依赖pom.XML生成实体类、

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