前言:首先我们应该知道什么是组件化?组件化的优势?组件化方案?通过本文章都能一一找到答案
一、组件化?
组件化就是将APP拆分成各个组件(模块),同时解除这些模块的耦合,然后 通过主工程将项目所需要的组件组合起来。
二、组件优缺点?
组件化优点:
1.组件可独立运行,提高代码复用性
2.组件化后项目的代码结构更加清晰,追踪问题、修复bug
3.不同业务组件相互独立
组件化缺点:
1.增加代码的冗余,组件化颗粒度越细,中间代码越多
2.增加项目复杂度
三、组件化方案?
想要达到每个组件之间的相对低耦合,就是断掉横向依赖,引入中间件将依赖下沉至中间件。
四、组件中间件设计方案?
方案:
一、URLRoute+Procotol
1.需要注册组件
2.调用方通过URL调用服务方页面,URL和服务方页面的关系通过路由表(map)映射,路由表需要维护
3.调用方通过Procotol调用页面类服务组件(传递复杂对象)
二、CTMediator(Target-Action runtime(NSClassFromString))
1.不需要注册组件,通过runtime(NSClassFromString)查找
2.参数传递统一用dictionary
备注:
Target-action实现
/*
其内部使用Runtime调用,传递三个参数
*当前需要调用类名
*当前需要调用类方法名
*需要传的参数
*/
- (id)performTarget:(NSString *)targetName action:(NSString *)actionName params:(NSDictionary *)params shouldCacheTarget:(BOOL)shouldCacheTarget
URLRoute实现
//注册路由
[[Router sharedInstance] registerURL:@"app://home/detail" with:^UIViewController *{ return [HomeDetailViewController new]; }];
//通过url获取
UIViewController *vc = [[Router sharedInstance] openURL:@"app://home/detail"]
五、URLRoute&CTMediator选择?
1.URLRoute动态性更好,适用于页面跳转业务较多的场景
2.CTMediator核心代码少,更适合业务较杂,调用关系相对简单