fireflyLogin網絡工具設計模式——類工廠(學習筆記)
阿新 • • 發佈:2017-06-06
nbsp dict var class requests result ini 業務層 指向
一、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網絡工具設計模式——類工廠(學習筆記)