现在的新项目实现了简单的协议模块化,即模块之前都是单独存在的,通过模块中心获取模块的提供者执行的。
大概就是每个模块有个 协议和协议提供者(主要就是实现协议里面的方法)
看看核心的代码
这是模块中心的 协议提供者
模块中心协议的代码
#import <Foundation/Foundation.h>
@protocol ModuleServiceProtocol <NSObject>
/**
获取每个协议的提供者实例
@return nil
*/
+ (id)getModuleInstance;
@end
之后所有的模块声明的协议都遵循这个协议。方便共同的方法管理
提供者
#import <Foundation/Foundation.h>
#import "ModuleServiceProtocol.h"
#import "ModuleOneProtocol.h"
#import "ModuleTwoProtocol.h"
@interface ModuleServiceCenter : NSObject
+ (instancetype)shareCenter;
//根据协议注册对应提供者的方法
- (void)registerService:(Protocol *)protocol forProvider:(Class)provider;
//根据协议获取模块的提供者
- (id)getProviderByService:(Protocol *)protocol;
@end
具体的实现可以看gihub的代码https://github.com/rjb0514/ProtocolModuleDemo
每个模块都有自己的协议 跟提供者
控制器之间的跳转都是通过 协议及提供者来提供的
大概控制器之间的跳转代码如下
//首先从模块中心获取模块的提供者
id<ModuleTwoProtocol> provider = [[ModuleServiceCenter shareCenter]getProviderByService:@protocol(ModuleTwoProtocol)];
//获取对应的控制器
UIViewController *vc = [provider gotoTwoVCWithName:@"哈哈"];
[self.navigationController pushViewController:vc animated:YES];
//传参数的话 就这么穿
- (id)gotoTwoVCWithName:(NSString *)name {
TwoViewController *vc = [[TwoViewController alloc] init];
vc.name = name;
return vc;
}
先这么简单的介绍 之后看后续代码的优化 然后在记录下来
虽然现在的模块化还不够完整, 后续改进
网友评论