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

相关文章

JavaWeb 中的 Filter组件详解

《JavaWeb中的Filter组件详解》本文详细介绍了JavaWeb中的Filter组件,包括其基本概念、工作原理、核心接口和类、配置方式以及常见应用示例,Filter可以实现请求预处理、响应后... 目录JavaWeb 中的 Filter 详解1. Filter 基本概念1.1 什么是 Filter1.

2025最新版Android Studio安装及组件配置教程(SDK、JDK、Gradle)

《2025最新版AndroidStudio安装及组件配置教程(SDK、JDK、Gradle)》:本文主要介绍2025最新版AndroidStudio安装及组件配置(SDK、JDK、Gradle... 目录原生 android 简介Android Studio必备组件一、Android Studio安装二、A

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

C#使用SendMessage实现进程间通信的示例代码

《C#使用SendMessage实现进程间通信的示例代码》在软件开发中,进程间通信(IPC)是关键技术之一,C#通过调用WindowsAPI的SendMessage函数实现这一功能,本文将通过实例介绍... 目录第一章:SendMessage的底层原理揭秘第二章:构建跨进程通信桥梁2.1 定义通信协议2.2

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

全面解析Golang 中的 Gorilla CORS 中间件正确用法

《全面解析Golang中的GorillaCORS中间件正确用法》Golang中使用gorilla/mux路由器配合rs/cors中间件库可以优雅地解决这个问题,然而,很多人刚开始使用时会遇到配... 目录如何让 golang 中的 Gorilla CORS 中间件正确工作一、基础依赖二、错误用法(很多人一开

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

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

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

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

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