1. 程式人生 > >fireflyLogin網絡工具設計模式——類工廠(學習筆記)

fireflyLogin網絡工具設計模式——類工廠(學習筆記)

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網絡工具設計模式——類工廠(學習筆記)