最近把項(xiàng)目中的老的網(wǎng)絡(luò)請求代碼梳理了一下,并基于中介者模式重寫了一個(gè)新的網(wǎng)絡(luò)引擎,解決老的代碼臃腫和難以擴(kuò)展的問題,而且代碼職責(zé)更加清晰,降低了耦合。
網(wǎng)絡(luò)引擎的功能
1.網(wǎng)絡(luò)請求調(diào)度中心
2.管理所有請求 通過數(shù)組緩存失敗的請求
3.取消某個(gè)請求
4.監(jiān)控網(wǎng)絡(luò)
5.其他功能可自行擴(kuò)展 很方便
UML圖
不多說先看UML圖。切記先看UML圖 普通的箭頭是引用 實(shí)線-空心三角形箭頭是類繼承 虛線-空心三角形是接口繼承(協(xié)議繼承)。

對照UML圖看類功能:
EMNetworkingManager
EMNetworkingManager 網(wǎng)絡(luò)請求管理器,所有的網(wǎng)絡(luò)請求 一定會走這個(gè)類,整理網(wǎng)絡(luò)請求的所有操作都在這個(gè)類中統(tǒng)一調(diào)度,他相當(dāng)于中介者模式中的中介者,而三個(gè)單例類:EMNetworkingRequest,EMNetworkingBusinessHandle,EMNetworkingUIHandle 則屬于同事角色,他們之間沒有耦合。
EMNetworkingRequest
當(dāng)EMNetworkingManager 進(jìn)行請求(或者監(jiān)控網(wǎng)絡(luò))的時(shí)候,就會調(diào)用EMNetworkingRequest中的網(wǎng)絡(luò)請求方法,EMNetworkingRequest中僅僅引用了AFNetworking,制作簡單的網(wǎng)絡(luò)請求。
EMNetworkingBusinessHandle
當(dāng)EMNetworkingManager 需要處理網(wǎng)絡(luò)結(jié)果對應(yīng)的客戶端自定義的業(yè)務(wù)時(shí)候,就會使用EMNetworkingBusinessHandle,進(jìn)行處理,這個(gè)類是和我們的業(yè)務(wù)掛鉤。
EMNetworkingUIHandle
當(dāng)EMNetworkingManager 需要處理網(wǎng)絡(luò)中UI的展示的時(shí)候,就會使用EMNetworkingUIHandle,進(jìn)行處理,這個(gè)類是和我們的設(shè)計(jì)的UI關(guān)聯(lián)的。
操作對象:
EMOperationObj 普通的GET POST請求 使用這個(gè)對象進(jìn)行組織參數(shù)和相關(guān)信息就夠用了, 這個(gè)類也是EMNetworkingManager 中的核心,所以相關(guān)的操作都會涉及到這個(gè)類。
EMUploadImageOperationObj 繼承于EMOperationObj,當(dāng)需要上傳單張圖片或者多張圖片的時(shí)候使用。
EMRecordingOperationObj 繼承于EMOperationObj,當(dāng)需要上傳錄音的時(shí)候使用。
響應(yīng)對象:
EMNetworkingResponseObj:
只要是想要使用返回的數(shù)據(jù):EMNetworkingResponseObj 這個(gè)類就夠用了。
由于GET請求返回的數(shù)據(jù)可能是字典,也可能直接就是data,所以定義了兩個(gè)字段:
@property (nonatomic, strong) NSDictionary * __nullable dicResponse; /*<zs20181113 網(wǎng)絡(luò)請求響應(yīng)數(shù)據(jù) /
@property (nonatomic, strong) id responseDataOnGet; /<zs20181114 Get 請求的時(shí)候 返回的數(shù)據(jù) */
此文檔只是說下思想,具體API Demo中有詳細(xì)的描述。
Demo地址 :https://github.com/zhiyoukaifa/NetworkEngines
參考鏈接(中介者模式):http://www.itdecent.cn/p/7f47103b202b
zs20190424 網(wǎng)絡(luò)層設(shè)計(jì)好文章:https://casatwy.com/iosying-yong-jia-gou-tan-wang-luo-ceng-she-ji-fang-an.html