MVC框架基礎(chǔ)知識(shí)

MVC框架基礎(chǔ)知識(shí):

一、什么是MVC?

?MVC是model-view-control的簡(jiǎn)稱。在解釋這個(gè)名詞之前,我們先假定一個(gè)案例,在這個(gè)例子中,有兩個(gè)文本框T1和T2、兩個(gè)按鈕B1和B2,B1為保存按鈕,B2為加載按鈕;T1為文本內(nèi)容編輯按鈕,當(dāng)點(diǎn)擊B1時(shí),將T1里面的內(nèi)容保存到數(shù)據(jù)庫(kù)中;當(dāng)點(diǎn)擊B2時(shí),將數(shù)據(jù)庫(kù)中保存的內(nèi)容顯示到T2上。為了驗(yàn)證這個(gè)操作是否是經(jīng)過(guò)數(shù)據(jù)庫(kù)了,我們可以做一個(gè)操作,比如將T1里面的內(nèi)容后面加上一些字符、符號(hào)等(這個(gè)相信很好做吧,你可以在將T1的數(shù)據(jù)保存到數(shù)據(jù)庫(kù)的時(shí)候做這個(gè)操作,也可以在將數(shù)據(jù)從數(shù)據(jù)庫(kù)中調(diào)出、顯示在T2上之前做這個(gè)操作,本案例不在詳細(xì)敘述)。當(dāng)我們腦海里形成好了這樣一個(gè)應(yīng)用之后,下面我們來(lái)看看M、V、C到底做什么樣的工作:

?View——顧名思義,就是存放視圖使用的。對(duì)應(yīng)上面的例子,我們應(yīng)該把T1、T2、B1和B2放在View上,對(duì)吧?

?Model——即模型。模型一般都有很好的可復(fù)用性,統(tǒng)一管理一些數(shù)據(jù)。在上面的例子中,數(shù)據(jù)庫(kù)是不是可以作為一個(gè)模型呢?答案是肯定的。所以,我們就把數(shù)據(jù)庫(kù)的所有操作都放在Model里面執(zhí)行——包括但不限于數(shù)據(jù)庫(kù)的創(chuàng)建、插入、查詢、更新和刪除(為啥都放一起?地球人都知道。。。)

?MVC模式能夠完成各司其職的任務(wù)模式,由于降低了各個(gè)環(huán)節(jié)的耦合性,大大優(yōu)化Controller的代碼量,當(dāng)程序調(diào)試時(shí),如果某一個(gè)功能沒(méi)有按照既定的模式工作,可以很方便的定位到到底是Controller還是View還是Model出了問(wèn)題,而且還利于程序的可復(fù)用性,建議在程序中能多多使用這個(gè)模式。

二、MVC的原理

上面的內(nèi)容中,已經(jīng)詳細(xì)描述了model、view和controller之間如何各司其職(即該是誰(shuí)的東西,誰(shuí)就要保護(hù)好,不能讓另外一個(gè)越俎代庖的去處理)。MVC模式雖然是iOS編程中使用最廣泛的模式,但論起復(fù)雜程度,MVC模式可以算是眾多設(shè)計(jì)模式之首。通常情況下,MVC模式需要綜合使用target-action模式、delegate模式、Notification或KVO模式等。下圖是斯坦福大學(xué)的iOS一堂關(guān)于iOS介紹的公開(kāi)課上所使用的示例圖,這張圖像也生動(dòng)的描繪出來(lái)了MVC模式的工作原理,接下來(lái)的原理講解也是依托于這張圖像:


1、 Controller和View之間可以通信,Controllor通過(guò)outlet(輸出口)控制View,View可以通過(guò)target-action、delegate或者data source(想想U(xiǎn)ITableVeiwDatasource)來(lái)和Controller通信;

2、 Controller在接收到View傳過(guò)來(lái)的交互事件(View就是完成讓人和程序的交互的呀,比如按B1按鈕)之后,經(jīng)過(guò)一些判斷和處理,把需要Model處理的事件遞交給Model處理(比如剛才的例子中的保存到數(shù)據(jù)庫(kù)),Controller對(duì)Model使用的是API;

3、 Model在處理完數(shù)據(jù)之后,如果有需要,會(huì)通過(guò)Notification或者KVO的方式告知Controller,事件已經(jīng)處理完,Controller再經(jīng)過(guò)判斷和處理之后,考慮下一步要怎么辦(是默默無(wú)聞的在后臺(tái)操作,還是需要更新View,這得看Controller的“臉色”行事)。這里的無(wú)線天線很有意思,Model只負(fù)責(zé)發(fā)送通知,具體誰(shuí)接收這個(gè)通知并處理它,Model并不關(guān)心,這一點(diǎn)非常重要,是理解Notification模式的關(guān)鍵。

4、 Model和View之間不直接通信!

?著作權(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)容