runtime
[TargetA action1], [TargetA action2]
[TargetB action1], [TargetB action2]
反革命组件化方案的调用方式:
本地跨组件间调用:
[[CTMediator sharedInstance] performTarget:targetName action:actionName params:@{…}]
远程应用调用:
openUrl + parseUrl的方式; 针对请求的路由操作,直接将Target和Action的名字封装到url中;
反革命组件化方案的好处:
-
将远程调用和本地调用做了拆分,而且由本地应用调用位远程应用调用提供服务;
-
组件仅通过Action暴露可调用接口;
-
组件化方案必需去Model设计:只有调用方依赖Mediator,响应方依赖是没有必要的;
-
调用方如何知道接收方需要哪些Key的参数,如何知道有哪些target可被调用?:在mediator中维护针对Mediator的Category,每个category对应一个target,categroy中的方法对应Action场景;
-
category为组合模式,根据不同的分类提供不同的方法,每个组件对应一个category分类;
-
参数验证和补救入口;
-
轻松的请求转发;
-
统一了所有组件间调用入口;
-
param的hardcode在整个app的作用域仅仅存在于category中,跟调用宏差不多;
-
安全保证,对url中进行native前缀验证;
-
保证动态调度考虑;
反革命组件化方案开源Demo:
代码Git地址:https://github.com/casatwy/CTMediator.git
二、实际项目中的组件化问题
(1) 为什么要组件化?
-
解决人多(更好的协作)、需求多(更好的功能模块划分)的问题;
-
解决项目模块间的代码耦合问题;(坚决抵制业务组件间代码直接引用)