美文网首页设计模式
组件化中间件选型(二): CTMediator

组件化中间件选型(二): CTMediator

作者: 文艺女青年的男人 | 来源:发表于2019-04-01 17:42 被阅读333次

关于中间件在组件化中间件选型(一):MGJRouter中已经介绍过了,直接介绍CTMediator

设计思路

CTMediator提供了三种API:远程app调用的入口、本地组件调用入口、释放某个target缓存,这里主要讨论本地组件调用入口。

所有组件都通过组件自带的Target-Action来响应,模块与模块的交互接口都被固话在了这一层,通过runtime机制获取到我们想要调用的Target,并通过Action获取到想要调动的选择子,主要用到的方法就是performSelector: withObject:。

应用场景:

模拟三个组件之间的交互方法,设置了两种交互的场景,一种是单纯的携带参数实现交互,另一种是回调参数。其中viewController是第一个组件,package2List、package1List分别是第二个组件和第三个组件,ViewController和package1List实现携带参数的界面跳转,ViewController和package2List实现携带参数的界面跳转,并回传参数。


携带参数实现交互

先查看一下CTMediator单例类里是如何写的,在- (id)performTarget:(NSString*)targetName action:(NSString*)actionName params:(NSDictionary*)params shouldCacheTarget:(BOOL)shouldCacheTarget 方法中,生成的对应target 类是以Target_开头的,

Target类

相应的Action方法是以Action_:开头的

Action方法

所以我们需要借助runtime中用到的Target_中间类来处理相应的action操作

runtime实现方法

按照CTMediator中的源码,我们建立了Target_Package1ViewController类和Action_Package1ViewController:函数,以及创建CTMediator分类CTMediator+Package1。

其中CTMediator+Package1的主要作用是:生成CTMediator中需要的params,传递下一步处理函数的类名称和方法名称,并调用基类中的performTarget:(NSString*)targetName action:(NSString*)actionName params:(NSDictionary*)params shouldCacheTarget:(BOOL)shouldCacheTarget 方法实现runtime调用具体类中的指定方法。

CTMediator+Package1

Target_Package1ViewController的主要作用是:把从上一个组件中传递的参数对当前组件进行赋值操作,并返回我们想要的值

Target_Package1ViewController

Package1ViewController:将上一个组件中传递过来的信息处理当下模块中的业务

Package1ViewController

在viewController中的调用:

viewController模块调用

直接调用CTMediator+Package1中的构造方法,并不会和package1List组件中的任何类产生耦合,整个交互过程都是黑箱操作。

回调参数

按照携带参数实现交互中的介绍,同样的我们建立了Target_Package2ViewController类和Action_Package2ViewController:函数,以及创建CTMediator分类CTMediator+Package2。

我们采用闭包的方式进行参数的回调,其中在CTMediator+Package2中把闭包当做参数进行传递

参数传递

在Target_Package2ViewController中,我们进行参数的赋值操作

赋值

在Package2ViewController组件中,我们只要处理当前的业务逻辑,当需要触发回调操作的时候,调用闭包实现参数的回传。

参数回传

在viewController的初始调用组件中,我们通过CTMediator+Package2调用和组件package2List中具体类交互的方法。

具体调用

总结:整个组件和组件间的相互调用,其实是采用了工厂方法模式,用这种架构,可以批量注册不同的工厂类,生产出不同的产品。其中CTMediator+Package2和CTMediator+Package1是CTMediator的工厂类,并且这两个工厂创建了Target_Package2ViewController和Target_Package1ViewController两个产品,根据这两个产品中的方法,我们可以获得需要的类,实现交互的完全黑盒化操作,去耦合性操作。

相比蘑菇街的MGJRouter方案,CTMediaor方案有很多优点:

1、蘑菇街必须要在app启动时注册URL响应者

2、蘑菇街没有针对target层单独的处理,而是将调用耦合进了业务代码里

CTMediator的缺点:

1、param的key的两端一致性,才能将参数顺利传递到下一个组件的业务层

2、每一个组件都需要建立Target_ 类和 CTMediator扩展类,耦合性降低了但是需要多创建一些类别来处理具体业务

iOS应用架构谈 组件化方案

demo以供大家下载参考

相关文章

  • 组件化中间件选型(二): CTMediator

    关于中间件在组件化中间件选型(一):MGJRouter中已经介绍过了,直接介绍CTMediator 设计思路 CT...

  • ios 组件化

    参考 iOS 组件化实践《二》基于现有项目拆分组件化实践 在现有工程中实施基于CTMediator的组件化方案 i...

  • iOS 组件化(二)

    利用CTMediator的组件化通过target-action操作。 先看下如何使用CTMediator的。 相关...

  • 组件化方案

    组件化方案引用 在现有工程中实施基于CTMediator的组件化方案 iOS组件化实践(一):简介 iOS组件化实...

  • 组件化-CTMediator

    组件化的意义 当业务变得越来越复杂的时候,整个工程代码量随时间推移会越来越多。最大的影响是降低开发人员的开发效率,...

  • 在现有工程中实施基于CTMediator的组件化方案

    在现有工程中实施基于CTMediator的组件化方案

  • 组件化的几个方案对比

    组件化(一) CTMediator 设计模式:中介(Mediator)模式 + Target-Action模式 ...

  • CTMediator路由swift

    接着上篇组件化的demo,在demo中借助CTMediator实现各个功能块间的调用 路由?组件化? 组件化是将A...

  • 工作计划,既项目重构计划提纲

    1.组件化 MGJRouter+ModuleManager方案 (蘑菇街方案) CTMediator+Target...

  • iOS组件化之CTMediator实战

    最近在看组件化相关内容,然后研究了下目前用的比较多的组件化方式,casa大神提供的CTMediator组件化方式。...

网友评论

    本文标题:组件化中间件选型(二): CTMediator

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