IOS博客項目搭建-19-項目重構-封裝業務工具類

上一節對網絡請求作了封裝,可是仍是存在一些問題,本節將對項目的業務邏輯進行重構。json

#爲什麼須要重構? ##第一個問題 上一節對網絡請求作了封裝,可是仍是存在一些問題,咱們能夠看看首頁,每個方法都作具體的業務邏輯,如獲取用戶信息,控制器太關注業務信息了,如控制器對請求的URL知道的太清楚,GET:@"https://api.weibo.com/2/users/show.json" parameters:params,咱們但願控制器不用太關注URL,若是之後該URL改變了,其餘地方也在用,那麼之後修改起來特別麻煩。api

##第二個問題 咱們如今是面向字典開發,這樣有一個問題,就是字典的Key很容易寫錯。緩存

// 2.封裝請求參數
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    params[@"access_token"] = [IWAccountTool account].access_token;

還有,以下面這個方法,加載首頁的數據方法,須要傳一個字典類型的參數,可是經過這個字典咱們不清楚字典裏邊應該放那些Key,放什麼東東,不是很清楚,沒有將業務邏輯描述很清楚,別人要使用你的方法,會一頭霧水,因此這個方法寫的很失敗。那應該怎樣處理呢?我以爲應該面向模型,用模型類封裝這些屬性。網絡

+ (void)homeStatusesWithParams:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure;

###解決方法: ####在首頁的Model目錄下建立首頁數據模型類 IWHomeStatusParam.h 輸入圖片說明工具

//
//  IWHomeStatusParam.h
//  ItcastWeibo
//  Created by kaiyi on 16-6-3.
//  Copyright (c) 2016年 itcast. All rights reserved.
//
// 封裝加載首頁微博數據的參數
#import <Foundation/Foundation.h>

@interface IWHomeStatusParam : NSObject

// 受權token
@property (nonatomic, copy) NSString *access_token;

// 返回ID比since_id大的微博
@property (nonatomic, assign) long long since_id;

@end

###而後在Home(首頁)/Tool/IWStatusTool.h文件中引入該模型類atom

//
//  IWStatusTool.h
//  ItcastWeibo
//
//  Created by kaiyi on 16-6-3.
//  Copyright (c) 2016年 itcast. All rights reserved.
//// 業務處理類(工具類)

#import <Foundation/Foundation.h>
@class IWHomeStatusParam;  // ********引入數據模型類*******

@interface IWStatusTool : NSObject

// 新的傳入模型參數方法
+ (void)homeStatusesWithParam:(IWHomeStatusParam *)param success:(void (^)(id))success failure:(void (^)(NSError *))failure;

@end

// 舊的字典參數方法
// + (void)homeStatusesWithParams:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure;

從以上的封裝能夠看出,模型類參數比字典參數更容易讓人懂,由於咱們能夠根據參數的模型類型,直接找到源文件的封裝的參數的屬性。code

##第三個問題 首頁獲取網絡數據,經過咱們以前封裝的HttpTool網絡工具發送http請求,若是後邊咱們須要添加本地緩存,即當用戶下次進入到App後,先是從本地緩存的沙盒加載數據,而後再從網絡請求數據,這樣須要怎麼處理呢?很顯然,以前封裝的層級關係已經不能適用了。 輸入圖片說明token

首頁要顯示微博數據,有兩種可能,第一種從本地緩存沙盒種獲取數據,若是本地沒有,則發送網絡請求獲取數據,因此,這裏就不必定利用HttpTool加載數據(如上圖的業務邏輯),咱們能夠假設有一個沙盒工具類 shaheTool,則首頁加載數據就須要使用兩個工具類,HttpTool和shaheTool,以下圖:圖片

輸入圖片說明

首頁展現微博數據,須要經過兩個工具類,若是還有第3、四種可能,那麼邏輯就很複雜也很混亂,業務邏輯就會常常的改,那麼該如何處理呢?開發

爲了讓控制器受到最小傷害,咱們能夠再搞一個工具類IWStatusTool,用該工具類屏蔽業務細節,之後到底是從沙盒或網絡獲取數據,能夠經過該業務工具類來選擇獲取,控制器不須要關心;這樣作的另外一個好處就是,若是之後某個業務的具體功能改了,也不會影響控制器。

輸入圖片說明

###工具類用途: ####IWStatusTool:業務工具類,即用來完成功能或業務的工具類,屏蔽業務實現細節。 ####IWHttpTool:通用工具類,用來完成某種通用的技術,如網絡請求。

相關文章
相關標籤/搜索