fireflyLogin网络工具设计模式——类工厂(学习笔记)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fireflyLogin网络工具设计模式——类工厂(学习笔记)相关的知识,希望对你有一定的参考价值。
一、RequestKeyID(业务id)
二、FireflyRequestHelper(对外提供初始化接口,提供网络回调代理方法,供FireflySafeLoginHelper使用,内部管理着网络请求的实现)
/** * 网络请求模块封装对象 * * @param requestKey key值用于生成最终的业务访问URL和一些特殊的参数 * @param delegate 指向请求网络的业务模块 * * @return 网络请求模块封装对象 */ - (id)initWithKey:(RequestKeyID)requestKey delegate:(id <FireflyRequestHelperDelegate>)delegate;
添加代理:
-(void)requestSuccess:(RequestKeyID)requestKey result:(NSObject*)requset;
三、FireflySafeLoginResult(请求回调处理对象,包括回调结果/错误吗/错误详情)
+ (instancetype)getResult:(FireflySafeLoginResultStatus)result withErrorCode:(NSString *)errorCode withErrorMsg:(NSString *)errorMsg { FireflySafeLoginResult *ret = [[FireflySafeLoginResult alloc] init]; ret.result = result; ret.errorCode = errorCode; ret.errorMsg = errorMsg; return ret; }
errorCode管理着当前的错误吗,errorMsg管理着错误详情。
四、FireflySafeLoginHelper(对外提供业务层接口,供业务层调用,其中包括登录/短信验证/插件下载。。。)
提供了回调接口供外部使用:
/** * 回调接口 * * @param requestKey 网络请求类型 * @param requset 登录结果字典 */ -(void)getResult:(RequestKeyID)requestKey result:(FireflySafeLoginResult* )requset;
FireflySafeLoginHelper提供单例来管理业务操作:分别为每个业务初始化FireflyRequestHelper请求对象,传入业务id,传入代理,FireflyRequestHelper通过当前的业务id分别进行对应的义务处理,例如分别定制不同的请求参数以及请求url。
例如源码:
- (NSString *)requestBodyStringWithKey:(RequestKeyID)requestKey httpbody:(id)httpBoby { NSDictionary *httpHeader = [self requestHttpHeaderWithKey:requestKey]; NSDictionary *headerDict = [[NSDictionary alloc] init]; if (httpBoby !=nil) { headerDict = @{@"header":httpHeader, @"body":httpBoby, }; } else { headerDict = @{@"header":httpHeader, }; } NSDictionary *requestDict = @{@"request":headerDict}; NSString *bodyString = [[NSString alloc] initWithData:[requestDict toJSON] encoding:NSUTF8StringEncoding]; return bodyString; } - (NSDictionary *)requestHttpHeaderWithKey:(RequestKeyID)requestKey { if (requestKey) { NSMutableDictionary *headerDict = [[FireflyWebService sharedInstance] getDefaultHttpHeader]; NSString *transId = [self.trandIdDict objectForKey:[NSNumber numberWithInteger:requestKey]]; [headerDict setObject:transId forKey:@"transId"]; NSLog(@"scapTransId:%@",transId); //防止重放攻击 NSString *time = [FireflyDateUtil dateTimeString]; if ([FireflyGlobalVar sharedInstance].isSequenceNeedDencry) { NSString *sequence = [FireflySecurityUtil aesEncrypt:time key:[FireflyGlobalVar sharedInstance].aesToken vector:AES_VECTOR]; [headerDict setObject:sequence forKey:@"reqSeq"]; } else { [headerDict setObject:@"0" forKey:@"reqSeq"]; } //需要根据不同的业务类型向headerDict 中添加内容 switch (requestKey) { case Firefly_DYNAMIC_MENU: /** * 动态的向 headerDict 中添加内容 */ break; default: break; } return headerDict; } return nil; }
同时FireflySafeLoginHelper还管理着FireflySafeLoginResult用以处理FireflyRequestHelper请求拿到的回调(当然FireflySafeLoginHelper要遵循FireflyRequestHelper的代理了),通过业务id进行回调的处理。对每一种情况分别进行处理,初始化FireflySafeLoginResult对象,将结果对象和当前业务id回调给业务层使用。
五、手绘了个流程图,丑
以上是关于fireflyLogin网络工具设计模式——类工厂(学习笔记)的主要内容,如果未能解决你的问题,请参考以下文章