iOS 網(wǎng)絡(luò)引擎設(shè)計(jì)

最近把項(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é)議繼承)。


網(wǎng)絡(luò)管理器UML.png

對照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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 30,246評論 8 265
  • 設(shè)計(jì)模式概述 在學(xué)習(xí)面向?qū)ο笃叽笤O(shè)計(jì)原則時(shí)需要注意以下幾點(diǎn):a) 高內(nèi)聚、低耦合和單一職能的“沖突”實(shí)際上,這兩者...
    彥幀閱讀 3,888評論 0 14
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,666評論 1 32
  • 所謂的專業(yè) 就是要你這樣也會 那樣也可以 他不清楚的你也有涉獵 都說是被逼出來 但是至少讓你擁有了一項(xiàng)技能 談客戶...
    慕星讀者OR獨(dú)者閱讀 216評論 0 1
  • 一個(gè)前言:我從來就不相信自己的記憶,早上吃的東西我現(xiàn)在都可以忘掉,所以大概老了之后可能會得老年癡呆,把該忘的、不...
    你帶不走莫愁閱讀 350評論 0 0

友情鏈接更多精彩內(nèi)容