iOS開發(fā)基礎(chǔ):蘋果的MVC模式

MVC模式我們談得夠多了,但總有一些爭(zhēng)議,比如RAC說明文檔里關(guān)于MVC的描述是這樣的:


來自ReactiveCocoa項(xiàng)目

斯坦福大學(xué)的iOS公開課第一課:


來自斯坦福公開課

中文維基百科上MVC條目的配圖:


來自中文維基百科

乍一看,以上都是三角形,都描述了Model、View、Controller三者的關(guān)系,Controller都處于View與Model的中間位置。

這里再明確一下MVC的基本定義:

MVC模式(Model–view–controller)是軟件工程中的一種軟件架構(gòu)模式,把軟件系統(tǒng)分為三個(gè)基本部分:模型(Model)、視圖(View)和控制器(Controller)。

  • (控制器 Controller)- 負(fù)責(zé)轉(zhuǎn)發(fā)請(qǐng)求,對(duì)請(qǐng)求進(jìn)行處理。
  • (視圖 View) - 屏幕上顯示的UI,響應(yīng)用戶事件,接受用戶輸入。
  • (模型 Model) - 程序員編寫程序應(yīng)有的功能(實(shí)現(xiàn)算法等等)、數(shù)據(jù)庫專家進(jìn)行數(shù)據(jù)管理和數(shù)據(jù)庫設(shè)計(jì)(可以實(shí)現(xiàn)具體的功能)。

簡(jiǎn)單的說,MVC只是定義了一個(gè)面向?qū)ο蟮能浖到y(tǒng)里,各個(gè)對(duì)象的角色。
三者概念并不難理解,難點(diǎn)在與這三者的交互關(guān)系,上面各方展示的關(guān)系里(線條表示),最大的差別在與Model 與 View 的關(guān)系,除了斯坦福那幅圖,其它都建立了View與Model 之間的聯(lián)系,無論間接還是直接。實(shí)際開發(fā)中,給一個(gè)TableViewCell 傳遞一個(gè)“Model”,也是常見做法。
但是,這樣對(duì)嗎?
這里我們想一下面向?qū)ο笤O(shè)計(jì)的目的:

面向?qū)ο蟮闹匾匦允欠庋b,而封裝的目的在于復(fù)用

比如一個(gè)閱讀APP中,圖書列表一個(gè)典型的TalbleViewCell是這樣的:


來自多看閱讀

這時(shí),給這個(gè)TableView的Cell傳遞一個(gè)Book的Model對(duì)象,是很自然的,而且顯得很方便,畢竟Cell要展示的封面圖片、書名、簡(jiǎn)介、作者,Book對(duì)象都能提供。

再看另一個(gè)APP:


來自MUJI PASSPORT

注意到,其實(shí)Cell的布局是很相似的

圖片發(fā)自簡(jiǎn)書App

試想一個(gè)綜合類購物app,同時(shí)提供書籍和服裝列表,給cell傳book還是cloth類,都不合適,而是直接需要圖片的傳圖片,需要文字的傳文字:

// 注意這里是偽代碼
if object is class book
    cell.image = object.coverImage
    cell.title = object.title
else if object is class cloth
    cell.image = object.image
    cell.title = object.productName

我們看下蘋果官方如何描述mvc三者的關(guān)系:


來自蘋果開發(fā)文檔

可見,

蘋果的定義是View 與 Model 徹底分離,換句話說,這兩者并不知對(duì)方的存在!

再注意下斯坦福的示意圖,View 與 Model 之間是雙實(shí)線,

圖片發(fā)自簡(jiǎn)書App

考過駕照的童鞋都知道其含義是 不要越界,
只有這樣,才能定義出可復(fù)用的對(duì)象,也符合了面向?qū)ο缶幊痰某踔裕?strong>抽象

MVC是Cocoa 框架的核心,蘋果要求任何類,必須是這三種角色之一。

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

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

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