UIViewController解耦---淺析Three20架構(gòu)-創(chuàng)新互聯(lián)

前言

Three20是一款由Facebook開源的框架,由大神Joe Hewitt創(chuàng)建,曾經(jīng)風(fēng)靡一時(shí),被無數(shù)開發(fā)者觀閱。Three20主要提供了UI模塊、Network模塊以及相關(guān)的一些工具。Three20自開源之初就褒貶不一,有人稱贊它強(qiáng)大的UI工具,也有人在詬病Three20各個(gè)模塊之間的耦合度太高,而且更多人在抱怨Three20極少的開發(fā)文檔,我想這些大概也是Three20在蘋果發(fā)布iOS6之后就停止了更新維護(hù)的原因吧。大神Joe Hewitt創(chuàng)建的在Github上的源碼早已刪除,目前只有少數(shù)人在GitHub上為自己的項(xiàng)目維護(hù)。而我也是有幸在某個(gè)項(xiàng)目中見識(shí)到了曾經(jīng)耳聞,卻未目睹的Three20框架,因此才有了這篇文章。

成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的黃州網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

架構(gòu)

最近大家都在討論MVC、MVVM以及MVP三種在移動(dòng)端開發(fā)中常用到的架構(gòu)模式,究竟是哪種架構(gòu)最強(qiáng)大,最適合移動(dòng)開發(fā)者使用。這里筆者也闡述一下個(gè)人意見,有句方言叫“樹挪死,人挪活”,個(gè)人認(rèn)為,架構(gòu)是死的,開發(fā)者是活的,我們不需要局限于哪一種架構(gòu)的模式之下,看到大家都在用MVVM,于是花大成本將MVC架構(gòu)模式的老項(xiàng)目重構(gòu)成了MVVM架構(gòu),這種重構(gòu)個(gè)人看來其實(shí)并沒有意義。更多的架構(gòu)話題就不想在這里討論了,筆者推薦幾篇大神們關(guān)于架構(gòu)的見解。

  • 被誤解的 MVC 和被神化的 MVVM

    這是一篇被早已被翻爛了的文章,起碼我個(gè)人反復(fù)閱讀了數(shù)次,由家喻戶曉的唐巧大神編寫。

  • iOS 架構(gòu)模式–解密 MVC,MVP,MVVM以及VIPER架構(gòu)

    最近在Cocoa China上發(fā)表的一篇譯文,筆者之前看過倆次原文,講的比較形象。

  • MVC,MVP 和 MVVM 的圖示

    大神阮一峰的博文,以圖形展示的方式使得各層結(jié)構(gòu)更加清晰明了。

  • 猿題庫 iOS 客戶端架構(gòu)設(shè)計(jì)

    猿題庫 iOS客戶端開發(fā)者藍(lán)晨鈺的博文,以實(shí)際項(xiàng)目猿題庫詳解了架構(gòu)設(shè)計(jì)

UIViewController瘦身

架構(gòu)模式并不是限制思維,相反應(yīng)該是發(fā)散思維,我們并不應(yīng)該為了架構(gòu)而架構(gòu),架構(gòu)應(yīng)該是服務(wù)于我們的代碼邏輯,打造更具有擴(kuò)展性和健壯的代碼結(jié)構(gòu)。就比如,大多數(shù)開發(fā)者都會(huì)遇到一個(gè)同樣的問題,隨著項(xiàng)目一天天的壯大,功能越來越多,需求越來越多,而我們的UIViewController也變得越來越臃腫。在上面推薦的博文中,筆者們都或多或少的闡述了如何打造更輕量級(jí)的UIViewController,大都列舉了一些共性策略:

  • 將一個(gè)界面中的數(shù)據(jù)獲取抽象成一個(gè)類,這里面細(xì)分一下,包括了網(wǎng)絡(luò)請(qǐng)求和數(shù)據(jù)庫緩存,我們可以針對(duì)這倆點(diǎn)再次封裝成倆個(gè)類。

  • 將一個(gè)界面中的數(shù)據(jù)處理邏輯抽象成一個(gè)類,這里面包含了各種數(shù)據(jù)轉(zhuǎn)換和算法邏輯,比如數(shù)據(jù)檢索,數(shù)據(jù)遍歷等。

  • 將一個(gè)界面中數(shù)據(jù)傳遞到UIView視圖的過程抽象成一個(gè)模型類,這里面就包含了對(duì)應(yīng)到UIView視圖的每一個(gè)數(shù)據(jù)的傳遞,比如icon圖標(biāo),title標(biāo)題,comment評(píng)論內(nèi)容等。

  • 將一個(gè)界面中所有展示的UIView視圖的添加和渲染抽象成一個(gè)類,這里包含了添加控件,自定義動(dòng)畫等。這個(gè)對(duì)視圖的封裝仍然可以細(xì)分,每一個(gè)自定義控件都可以單獨(dú)封裝,因?yàn)檫@樣可以完美的在其他的UIViewController達(dá)到復(fù)用的目的。

而完成了上述抽象之后,就會(huì)發(fā)現(xiàn)我們需要在UIViewController中完成的工作僅僅是處理視圖交互邏輯和數(shù)據(jù)傳遞邏輯,這樣我們的UIViewController就比較容易維護(hù)了。

Three20架構(gòu)

每一種框架的興起和衰落都有其相應(yīng)的時(shí)勢(shì)和必然性。雖然Three20飽受詬病,早已跌落神壇,但是它的存在是有一定道理的。雖然它在模塊之間的耦合度較高,但是個(gè)人認(rèn)為它對(duì)UIViewController的抽象和封裝也是一個(gè)非常好的借鑒。在這里以Three20中對(duì)TTTableViewController的解耦為例,先上圖看一下TTTableViewController包含的模塊:

UIViewController解耦---淺析Three20架構(gòu)

這里根據(jù)上面的結(jié)構(gòu)圖具體地解釋一下解耦的設(shè)計(jì)方式。TTTableViewController的設(shè)計(jì)遵從了經(jīng)典的MVC模式,TTModel負(fù)責(zé)數(shù)據(jù)的獲取和處理邏輯,TTTableView負(fù)責(zé)視圖展示,TTTableViewController負(fù)責(zé)TTModelTTTableView之間的通信邏輯和界面的控件添加渲染。而TTTableViewController在順應(yīng)了MVC模式的前提下,也做了一些擴(kuò)展,它將TTTableViewDatasource接收數(shù)據(jù)傳遞的邏輯抽象出來封裝成了TTTableItem。而TTTableItem就是關(guān)聯(lián)TTModel傳遞數(shù)據(jù)的過程,因而我們也可以把這一層稱作是MVVM架構(gòu)模式中的ViewModel

根據(jù)上面的圖示,我們可以看到獲取數(shù)據(jù)的邏輯都在TTModel中,而且界面控件添加和動(dòng)畫渲染這些邏輯仍然都在TTTableViewController中,因此我根據(jù)大神們的一些建議,對(duì)項(xiàng)目中的Three20進(jìn)行了一下強(qiáng)化,先上圖看一下增加的結(jié)構(gòu):

UIViewController解耦---淺析Three20架構(gòu)

可以清晰地看到,我將TTModel中處理緩存數(shù)據(jù)的邏輯抽象出來,單獨(dú)放在了TTCacheModel中,此外還將TTTableViewController中添加控件和渲染動(dòng)畫的邏輯抽象出來,放到了TTViewRender中,這樣TTTableViewController就只關(guān)心界面交互以及TTModelTTTableItem之間的數(shù)據(jù)傳遞邏輯。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁題目:UIViewController解耦---淺析Three20架構(gòu)-創(chuàng)新互聯(lián)
文章URL:http://muchs.cn/article38/csjppp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、標(biāo)簽優(yōu)化、移動(dòng)網(wǎng)站建設(shè)網(wǎng)站制作、App設(shè)計(jì)做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)