XMNetworking: 通過(guò)一個(gè)網(wǎng)絡(luò)庫(kù)談?wù)劮庋b

XMNetworking 是今天微博上看到的 南峰子 他們團(tuán)隊(duì)一個(gè)同學(xué)開(kāi)源的一個(gè)網(wǎng)絡(luò)框架.
這個(gè)框架是基于 AFNetworking 的再次封裝, 接口簡(jiǎn)潔, 使用簡(jiǎn)單.
這引起了我的一個(gè)簡(jiǎn)單的小思考, 什么才是一個(gè)好的封裝呢?
這個(gè)問(wèn)題其實(shí)是個(gè)很個(gè)人的問(wèn)題, 我只能說(shuō)說(shuō)我自己的想法.

我認(rèn)為簡(jiǎn)單的封裝就是把搜有的流程變成 三個(gè)步驟, 并且簡(jiǎn)化這三個(gè)步驟

配置->執(zhí)行->響應(yīng)

其實(shí)任何類庫(kù)往小了說(shuō)也就是這三個(gè)步驟, 把他們優(yōu)雅非切開(kāi), 就是我對(duì)封裝的理解.
我們往往希望的就是在一個(gè)地方把我需要的配置設(shè)置好, 在需要的時(shí)候去執(zhí)行方法, 然后統(tǒng)一的得到結(jié)果,處理結(jié)果.

希望是美好的,事實(shí)是殘酷的,我們往往面對(duì)的是一堆不知所云的的參數(shù),一些不知什么時(shí)候調(diào)用的代理,還有一堆各色各樣的執(zhí)行方法,我覺(jué)得這個(gè)時(shí)候,我會(huì)想起來(lái)曾經(jīng)聽(tīng)到的一個(gè)小笑話, 如何評(píng)價(jià)一個(gè) java 程序員的好壞呢? 就是看他對(duì) Spring 知道的有多少.... 當(dāng)然,我不會(huì) java, 就當(dāng)我瞎說(shuō)的吧.

那我們結(jié)合 XMNetworking 來(lái)說(shuō)一下我對(duì)這三個(gè)步驟的理解
XMNetworking 一個(gè)分為三個(gè)大類 XMRequest XMCenter XMEngine, 其實(shí)這三個(gè)類也就可以簡(jiǎn)單的映射為我之前說(shuō)的三個(gè)步驟, 當(dāng)然不得不說(shuō) 這個(gè)庫(kù)的確是個(gè)很簡(jiǎn)單的類庫(kù), 如果稍微復(fù)雜一點(diǎn), 也不能這么簡(jiǎn)單的分為三塊.
XMRequest 對(duì)應(yīng)的就是配置, XMCenter 對(duì)應(yīng)的是調(diào)用和響應(yīng), XMEngine 對(duì)應(yīng)的具體的執(zhí)行

XMRequest 看名字我們也都知道,它代表著一個(gè)請(qǐng)求, 當(dāng)我們發(fā)起一個(gè)請(qǐng)求的時(shí)候,只需要設(shè)置這個(gè) request 的參數(shù), 然后把它傳遞給 XMCenter 就大功告成了.
當(dāng)然, 我希望看到的是清爽配置清單, 而不知數(shù)以百計(jì)復(fù)雜的參數(shù). 這個(gè)又要說(shuō)一個(gè)笑話, 就是如何看一個(gè)軟件是否擁有設(shè)計(jì)師, 就看它的主頁(yè)上是否羅列了一大堆參數(shù)設(shè)置項(xiàng).
所以, 我認(rèn)為在對(duì)配置進(jìn)行封裝的時(shí)候要把常用的參數(shù)暴露出來(lái), 把復(fù)雜的不經(jīng)常使用的參數(shù)隱藏起來(lái).
那么我們就一定要把所有配置放在一起設(shè)置嗎, 當(dāng)然不是, 我們還要根據(jù)需求, 把他們?cè)俅芜M(jìn)行區(qū)分, 并且放到合適的地方. 比如說(shuō) XMNetworking 就把全局的參數(shù)都放到了 XMCenter 中去設(shè)置.

XMCenter, 這個(gè)是一個(gè)殼, 我們通過(guò)它, 把參數(shù)傳進(jìn)去, 然后再通過(guò)它觸發(fā)回調(diào), 好的封裝是我只需要關(guān)心殼, 而不需要必須去探尋底層的實(shí)現(xiàn), 如果有一些庫(kù)要求我們?cè)偕弦粚诱{(diào)用之后還要進(jìn)入到下層中處理回調(diào), 我相信是沒(méi)有人愿意使用它的. 而且我想說(shuō)的是 代理模式, 不得不承認(rèn) 代理 在一些情景中是十分正確高效的, 但是在處理一些簡(jiǎn)單的邏輯或者說(shuō)是流式/鏈?zhǔn)降倪壿嫷臅r(shí)候感覺(jué)有點(diǎn)復(fù)雜, 我更希望使用 callback block 來(lái)處理, 而代理呢, 我覺(jué)得更適用于處理事件的觸發(fā), 比如 tableview.
還有一點(diǎn)值得說(shuō)的就是 XMCenter 提供的調(diào)用接口, 為了用戶體驗(yàn), 它提供了很多簡(jiǎn)化的接口, 這也是讓人很舒服的一點(diǎn), 并且考慮到使用場(chǎng)景提供了 單例 和 生成對(duì)象兩種模式. 能夠簡(jiǎn)單的應(yīng)付大多數(shù)問(wèn)題

XMEngine這個(gè)類相對(duì)前面的兩個(gè)類就復(fù)雜的多了, 他封裝了所有對(duì) AFN 的操作, 這也就是把所有復(fù)雜的東西封裝起來(lái), 多余的就不說(shuō)了.

最后還有一點(diǎn)說(shuō)的就是, 封裝難道就是僅僅把原有的方法優(yōu)雅的重構(gòu)一遍?當(dāng)然不是, 我們往往在封裝的時(shí)候還可以吧我們的一些邏輯和行為進(jìn)行再次封裝, 從而簡(jiǎn)化我們的操作, TTRequest 提供了兩個(gè)類 XMChainRequest XMBathRequest, 我希望大家自己去看看源碼, 然后自己體會(huì)一下.

總結(jié)

先說(shuō)明一點(diǎn), 肯定沒(méi)有絕對(duì)正確的理論, 尤其是這種很個(gè)人的封裝方式的討論.
具體的解決問(wèn)題的方式還要根據(jù)具體的需求來(lái)進(jìn)行判斷.
表面上, 讓類庫(kù)變得簡(jiǎn)單而優(yōu)雅.
內(nèi)在呢, 要把結(jié)構(gòu)變得低耦合, 清晰, 可拓展
最后就是在基礎(chǔ)功能的基礎(chǔ)之上還要加上額外的便利功能.
這就是我對(duì)封裝的不成熟的個(gè)人理解.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市器赞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌请契,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爽锥,死亡現(xiàn)場(chǎng)離奇詭異畔柔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)靶擦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門玄捕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人桩盲,你說(shuō)我怎么就攤上這事。” “怎么了孝冒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵拟杉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我搬设,道長(zhǎng),這世上最難降的妖魔是什么拿穴? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任默色,我火速辦了婚禮,結(jié)果婚禮上腿宰,老公的妹妹穿的比我還像新娘。我一直安慰自己吃度,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布伊者。 她就那樣靜靜地躺著,像睡著了一般删壮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上央碟,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天均函,我揣著相機(jī)與錄音,去河邊找鬼苞也。 笑死,一個(gè)胖子當(dāng)著我的面吹牛收毫,可吹牛的內(nèi)容都是我干的攻走。 我是一名探鬼主播此再,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼输拇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了策吠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤猴抹,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后炉菲,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年薪介,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汁政。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缀旁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出并巍,到底是詐尸還是另有隱情,我是刑警寧澤懊渡,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站誓禁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏摹恰。R本人自食惡果不足惜辫继,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一姑宽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧低千,春花似錦、人聲如沸示血。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)亿絮。三九已至,卻和暖如春派昧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蒂萎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留五慈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓毙芜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親腋粥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,734評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件音瓷、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,058評(píng)論 4 62
  • 朱麗,本人承諾绳慎,文章內(nèi)容為原創(chuàng)漠烧,且為在其它平臺(tái)發(fā)布。 我本是風(fēng) 無(wú)拘無(wú)束 無(wú)影無(wú)蹤無(wú)牽絆 如果有一天我愿意停留 那...
    Troublemak_3c51閱讀 200評(píng)論 0 0
  • 在幼兒園的時(shí)候已脓,我的情竇就開(kāi)了通殃,可能是看電視看多了吧,因?yàn)樾r(shí)候爸媽都很忙画舌,經(jīng)常把我一個(gè)人鎖在家里看電視,神奇...
    不喜歡自己的女孩閱讀 206評(píng)論 0 0
  • by http://www.devio.org/2016/10/09/INSTALL-FAILED-CONFLIC...
    zbmzly閱讀 501評(píng)論 0 0