UIViewController解耦---淺析Three20架構

前言

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

架構

最近大家都在討論MVC、MVVM以及MVP三種在移動端開發中常用到的架構模式,究竟是哪種架構最強大,最適合移動開發者使用。這裏筆者也闡述一下個人意見,有句方言叫“樹挪死,人挪活”,個人認爲,架構是死的,開發者是活的,我們不需要侷限於哪一種架構的模式之下,看到大家都在用MVVM,於是花大成本將MVC架構模式的老項目重構成了MVVM架構,這種重構個人看來其實並沒有意義。更多的架構話題就不想在這裏討論了,筆者推薦幾篇大神們關於架構的見解。

UIViewController瘦身

架構模式並不是限制思維,相反應該是發散思維,我們並不應該爲了架構而架構,架構應該是服務於我們的代碼邏輯,打造更具有擴展性和健壯的代碼結構。就比如,大多數開發者都會遇到一個同樣的問題,隨着項目一天天的壯大,功能越來越多,需求越來越多,而我們的UIViewController也變得越來越臃腫。在上面推薦的博文中,筆者們都或多或少的闡述瞭如何打造更輕量級的UIViewController,大都列舉了一些共性策略:

  • 將一個界面中的數據獲取抽象成一個類,這裏面細分一下,包括了網絡請求和數據庫緩存,我們可以針對這倆點再次封裝成倆個類。

  • 將一個界面中的數據處理邏輯抽象成一個類,這裏麪包含了各種數據轉換和算法邏輯,比如數據檢索,數據遍歷等。

  • 將一個界面中數據傳遞到UIView視圖的過程抽象成一個模型類,這裏面就包含了對應到UIView視圖的每一個數據的傳遞,比如icon圖標,title標題,comment評論內容等。

  • 將一個界面中所有展示的UIView視圖的添加和渲染抽象成一個類,這裏包含了添加控件,自定義動畫等。這個對視圖的封裝仍然可以細分,每一個自定義控件都可以單獨封裝,因爲這樣可以完美的在其他的UIViewController達到複用的目的。

而完成了上述抽象之後,就會發現我們需要在UIViewController中完成的工作僅僅是處理視圖交互邏輯和數據傳遞邏輯,這樣我們的UIViewController就比較容易維護了。

Three20架構

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

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

根據上面的圖示,我們可以看到獲取數據的邏輯都在TTModel中,而且界面控件添加和動畫渲染這些邏輯仍然都在TTTableViewController中,因此我根據大神們的一些建議,對項目中的Three20進行了一下強化,先上圖看一下增加的結構:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章