iOS 组件化漫谈
1.准备工作
由于工程越来越大,里面的文件也越来越多。很多时候merge代码的时候工程文件起了冲突之后,若 .xcodeproj文件冲突 打开之后很难以修改。
架构其实相对开发来说还是比较难于下手的东西,概念谁都知道,就是组织好,管理好,使用好自己的代码(代码规范也是重要的一环)
故想到了模块化程序,于是乎就去网上找资料
蘑菇街 安居客 Small (里面都有demo,安居客的看后之后简单一点)
1.1 大致差不多就是URL的格式 scheme://host/path?query
1.启动的时候注册相应的url host为相应的模块名
2.需要的时候直接使用路由调用url的方法
2.CTMediator概述(现未生成子工程,所以是以文件夹的方式代替工程)
2.1 分为三个部分
壳工程:整个程序的入口 一个产品一个壳工程。壳工程中可随意加子工程(无论多少个),主要用于净化业务。
主工程:lib库(网络工具,相册工具,文件服务,路由)
确立一个一个主工程。保证到时候将主工程移动到任何壳工程中都能使用,不致于一拖到工程中就到处报错,然后这里改改,那里删删
子工程:即模块工程
子工程要保证其独立性,这里所说的独立性是其依赖主工程的前提下,于其他子工程互不引用,即a子工程删掉,b子工程照常运行。
每次项目可归并到子工程中,因为子工程一般是按模块分的,而且子工程内部用那种架构(MVC,MVVC...)都是可以的.
2.2 CTMediator工作原理
1. + (instancetype)sharedInstance;
路由单例对象
2. - (id)performActionWithUrl:(NSURL *)url completion:(void(^)(NSDictionary *info))completion;
调用之后可返回一个控制器对象,传入url的格式如 hgl://message/chat?key=value (message:自模块名,chat:具体要指向的控制器)
3. - (id)performTarget:(NSString *)targetName action:(NSString *)actionName params:(NSDictionary *)params;
该方法比方法2更加快捷,可以让开发人员更加快速的理解 [self performTarget:@"message" action:@"chat" params:@{@"key":@"value"}];
4.所有模块都必须有一个路由接收器(即入口)
4.1接收器类名 Target_模块名 (Target 也可以换成你喜欢的单词 定义好之后告诉其他人就行,别人也好按照这个规范来)
4.2接收器里面的方法名 - (UIViewController *)Action_xx:(NSDictionary *)param; (xx 代表某个控制器)