1.前言
项目组件化这个事情在上一家公司的时候我们就有了一定的尝试,但是当时因为业务划分存在很大的难度所以就放弃了,当时我们的思路是先做业务划分,划分之后再进行组件化,但是在业务划分中一个很大的问题我们没有解决,路由。路由的问题导致业务互相交杂无法划分。最后不了了之了。而最近公司有了一个app重构,基本等于全部推翻重新写,所以在这次的项目中我装备将组件化的这个引入。
2.前期调研
看了目前市面上开源库中比较流行的两种方案:
第一种 URL跳转 代表库MGJRouter
第二种 Target-Action 代表库CTMediator
两种各有千秋,这里就不进行分析了 具体分析可以参考https://halfrost.com/ios_router/
我个人看法是如果公司业务规模比较大,希望可以使用灵活的方式进行配置,推荐使用MGJRouter这种方式,如果公司业务规模较小,且开发团队不是很大,技术实力不是很强可以使用CTMediator。
- CTMediator使用情况
结合目前公司情况以及公司业务我决定使用CTMediator,看完demo 以及网上的使用之后就开始干了。在使用的的过程中遇到了以下问题,
1.参数不明确,尽管库中只要求了三个参数但是第一次使用的时候不知道参数的含义。在提交issues之后得到很快的解决才了解到了
在swift项目中kCTMediatorParamsKeySwiftTargetModuleName 这个参数应该是项目名字,我之前的理解是模块文件夹名字.
//targetName是项目中创建的taget_xxxx文件名字的xxxx
//actionName是自己创建的CTMediator中的创建的func userData_showUserInfo 里面的showUserInfo
- (id)performTarget:(NSString *)targetName action:(NSString *)actionName params:(NSDictionary *)params shouldCacheTarget:(BOOL)shouldCacheTarget;
2.根据demo配置好项目之后发现target为nil 导致项目闪退
原因:kCTMediatorParamsKeySwiftTargetModuleName参数名理解错误
3.参数如何传递?
目前还只是使用上了,后续会更新这篇文章回答这个问题。
- MGJRouter使用情况
鉴于CTMediator硬编码的问题,现在app都走灵活路线会尽量减少硬编码的问题,特意准备回去再继续研究一下MGJRouter。后续更新
网友评论