接着上篇组件化的demo,在demo中借助CTMediator实现各个功能块间的调用
路由?组件化?
组件化是将APP按照业务模块划分成几个主要的组件,理想的组件化是一个单独工程,在没有任何交互的情况下可以独立运行。完全解耦的组件和组件之间要进行交互而且不能耦合,需要借助路由(中间件)来完成组件和组件的信息交换操作。
路由起到了调度中心的作用,这种设计模式也被称为 中介者模式。
路由就是把URL映射到响应的类或者controller。首先要为其添加一个配置表,该配置表定义了URL的规则和映射的目标。
scheme表示使用什么协议;
host表示主机标识
path表示文件所在路径与文件本身是什么。
CTMediator路由方案:
CTMediator.h源码
CTMediator本地调用的使用:
1、在组件当中创建一个Target_xxx格式的中间类
Pasted Graphic 1.png2、类中定义Action_XXXX格式的方法,方法中实现组件的实例化,传参等。
Pasted Graphic 13.png3、在主项目或者基础组件中增加一个CTMediator的扩展(OC分类),在里面去关联上面提到的中间类,以字符串的形式传递类名和方法名,再通过调用CTMediator中的performTarget方法实现函数调用
Pasted Graphic.png4、主工程中获取CTMediator的extension返回类
Pasted Graphic 15.png注意的一下几点:
1、中间类命名格式为Target_xxx;
2、中间类方法名命名格式为Action_xxxx;
3、中间类切记添加@objc、CTMediator的扩展要加public修饰;
4、调用CTMediator扩展extension(OC建立category) ;
self.performTarget(“xxx”, action: “xxxx”, params: params, shouldCacheTarget: false)
5、中间件是swift类型时必须添加 kCTMediatorParamsKeySwiftTargetModuleName 参数,value为中间类所在的组件名称,中间类是oc类型不加;
6、CTMediator单利与中间件class类型不一致时,swift类中callback回调需要swift闭包与oc对象转换;
7、如果CTMediator扩展写在基础件中,因为只运行了当前组件,所以无法进行组件间调整;
待解决问题?
1、子模块中oc如果调用swift? 子模块-Swift.h 加不进去
网友评论