另類網路層設計

wangrui460發表於2018-02-05

(閱讀時長:2分鐘)

前言

文章較短,其實只是提一下自己的思路和想法,還望各位大佬多多指點。

1. 為什麼另類

這裡說的另類可能只是一個噱頭,因為我發現自己設計的網路框架和別人的都不一樣啊?

2. 哪裡不一樣

2.1 我見過的

我見過的有三種:

第一種是對 AFNetworking 做一層封裝,然後在控制器裡直接發起網路請求,需要的各種引數也都寫在控制器裡面(這種一般只會出現在特別小的專案中,很少見)。

第二種會對 AFNetworking 做兩層封裝。第一層是管理類,所有請求都會走這個管理類提供的請求介面。第二層是不同功能的請求集合,同一個功能的多個請求放在一個檔案中,可固定引數都寫在對應請求方法裡,請求的成功或失敗結果也會在這個檔案中解析。控制器通過呼叫第二層提供的方法來發起請求,成功或失敗拿到的資料可以直接使用。

第二種

第三種也是對 AFNetworking 做兩層封裝。和第二種一樣第一層也是管理類,所有請求都會走這個管理類提供的請求介面。第二層是實際請求類,每個網路請求介面對應一個Api檔案,可固定引數都寫在這個Api檔案裡。控制器通過第二層Api檔案提供的方法來獲取Api物件,然後通過Api物件呼叫第一層提供的方法發起請求。

第三種

2.2 我的

我的同樣是對 AFNetworking 做了兩層封裝。第一層管理類,第二層是實際請求類。這裡和第三種不一樣的地方是,我的所有網路請求都放在同一個檔案中,控制器只需要一行C函式程式碼就可以發起請求。當然這裡的重點是所有請求都在同一個檔案中,並且使用方式和第二種有著明顯的差別。

我的

3. 疑問

3.1 請求多了不會很臃腫嗎?

舉個?,我的上一個專案共有102個介面,.h 檔案共有162行程式碼,.m 檔案共有533行程式碼,就個人而言並不覺得臃腫。

3.2 這樣設計有什麼好處嗎?

清晰明瞭、方便查詢、便於除錯、降低耦合、簡單整合

4. 細節

4.1 具體請求實現

下圖所示的 C 函式實現程式碼就是一個網路請求,不確定的 value 通過函式引數傳遞,固定的 value 直接寫在函式裡。具體會不會立馬發起請求,需要看最後呼叫的是 sendRequest 還是 createRequest。

另類網路層設計

4.2 函式命名規則

舉個?你就明白了

WRNetWrapper *req_address_list(NetCallBack callBack);
WRNetWrapper *req_address_add(NSDictionary *address, NetCallBack callBack);
WRNetWrapper *req_address_edit(NSDictionary *address, NetCallBack callBack);
WRNetWrapper *req_address_default(int address_id, NetCallBack callBack);
WRNetWrapper *req_address_delete(int address_id, NetCallBack callBack);
WRNetWrapper *req_address_update(int version, NetCallBack callBack);
複製程式碼

這裡使用下劃線而不是駝峰,並且都是以 req 開頭都是為了區分其他程式碼,程式碼提醒更加明瞭

5. 如何實現

哈哈哈,前言說了這裡只是提一下自己的思路和想法。如果覺得不錯或者感興趣的話可以前往 github 檢視。

6. 寫在最後

因為某些不可描述的原因我已經從原有團隊離職,現在失業在家。如果你的團隊在上海(杭州也考慮)剛好也招 iOS,歡迎聯絡我,我的郵箱 wangruidev@gmail.com


















































什麼不可描述 ?
發生在最近
公司轉型,不做APP,研發團隊所有人 out

相關文章