iOS開發(fā)·什么是MVC設計模式

MVC是iOS開發(fā)中一種很基礎的工程架構模式檬洞,也是構建iOS應用的標準模式煞茫。它將數(shù)據(jù)模型效五、UI視圖邏輯控制器分開并規(guī)定它們之間的通信方式黎茎,大大優(yōu)化了程序的結構組織囊颅。

M表示Model,專門用來存儲對象數(shù)據(jù)的模型工三,一般使用一個繼承NSObject的基本類對模型的數(shù)據(jù)進行封裝迁酸,在.h文件中聲明一些用來存放數(shù)據(jù)的屬性。在CoreData中模型即Managed Object俭正。

V表示View的可見元素奸鬓,展示UI界面給用戶,主要為UIKitUIView的子類掸读,其中和用戶進行交互的視圖元素為UIKit子類UIControl下的子類視圖串远,非UIControl子類的視圖不能交互。

C表示Controller儿惫,邏輯控制器澡罚,對應于UIKitUIViewController及其子類控制器,負責協(xié)調(diào)ViewModel肾请。

ControllerView的通信主要通過一些代理協(xié)議以及block代碼塊等實現(xiàn)留搔;而Controller``和Model的通信主要用到Notification消息通知KVO典型觀察者模式實現(xiàn);ViewModel是隔離的铛铁,不可以直接相互通信隔显。

MVC設計模式是官方推薦在iOS開發(fā)中使用的規(guī)范模式却妨,應用的數(shù)據(jù)存儲在Model層,邏輯處理在Controller中進行括眠,而用戶界面在View中展示彪标。

如何理解MVC設計模式?

MVC全名是Model View Controller,是模型(Model)界面視圖(View)控制器(Controller)的縮寫掷豺,它是一種軟件設計規(guī)范捞烟,用一種將業(yè)務邏輯、數(shù)據(jù)当船、界面顯示分離的方法組織代碼题画,將業(yè)務邏輯聚集到Controller中,在改進和個性化定制界面及用戶交互的同時生年,不需要編寫業(yè)務邏輯婴程。可以用圖1來描述通過控制器實現(xiàn)的視圖到模型的交互過程抱婉。

MVC設計模式.png

1.模型對象

模型對象封裝了應用程序的數(shù)據(jù),并定義了操控和處理該數(shù)據(jù)邏輯運算規(guī)則桌粉。用戶在視圖層中所進行的創(chuàng)建或者修改數(shù)據(jù)的操作蒸绩,會通過控制器對象傳達出去,最終會創(chuàng)建或更新模型對象铃肯。另外患亿,當模型對象更改時(例如,通過網(wǎng)絡連接接收到新數(shù)據(jù))押逼,模型對象會通知控制器對象步藕,控制器對象更新相應的視圖對象。被模型返回的數(shù)據(jù)是中立的挑格,也就是說模型和數(shù)據(jù)格式無關咙冗,這樣一個模型能為多個視圖提供數(shù)據(jù)。由于應用于模型的代碼只需要寫一次就可以被多個視圖重用漂彤,所以減少了代碼的重復性雾消。

2.視圖對象

視圖對象是應用程序中用戶可以看到并且能夠與之交互的界面。視圖對象對外提供顯示自身和響應用戶操作的接口挫望。視圖對象的主要作用就是顯示來自應用程序模型對象的數(shù)據(jù)立润,并使該數(shù)據(jù)可被編輯。在iOS應用程序開發(fā)中媳板,所有的控件桑腮、窗口等都繼承自UIView,對應于MVC中的View蛉幸。

3.控制器對象

在應用程序的一個或多個視圖對象一個或多個模型對象之間破讨,控制器對象充當媒介丛晦。因此,控制器對象是同步管理程序添忘,通過控制器對象采呐,視圖對象了解模型對象的更改,反之亦然搁骑「拢控制器對象還可以為應用程序執(zhí)行設置和協(xié)調(diào)任務,并管理其他對象的生命周期仲器∶郝剩控制器對象解釋在視圖對象中進行的用戶操作,并將新的或更改過的數(shù)據(jù)傳達給模型對象乏冀。模型對象更改時蝶糯,一個控制器對象會將新的模型數(shù)據(jù)傳達給視圖對象,以便視圖對象可以顯示它辆沦。

MVC設計模式的低耦合性昼捍、高重用性可維護性等優(yōu)點顯而易見肢扯,使得原本復雜的代碼與界面的交互變得簡單妒茬、清晰、明了蔚晨,開發(fā)者可以把更多的精力放在前端界面的設計上乍钻,而不用絞盡腦汁去思考究竟應該如何使界面得到同步,這樣減輕了設計壓力铭腕,也從另一方面使用戶得到更多更好的享受體驗银择。事實上,MVC設計模式也是蘋果公司推薦并在大量實踐的設計模式累舷。例如浩考,對于不同的UIView類型的視圖對象,都有相應地控制器對象(即UIViewController)與之對應笋粟。例如怀挠,常用的視圖類UITableView,它所對應的控制器對象就是UITableViewController類對象害捕。

MVC設計模式有哪些優(yōu)缺點?

  • MVC的優(yōu)點如下:
1.代碼具有低耦合的特性

耦合性绿淋,也稱塊間聯(lián)系,指程序結構中各模塊間相互聯(lián)系緊密程度的一種度量尝盼。模塊之間聯(lián)系越緊密吞滞,其耦合性就越強,模塊的獨立性越差。在MVC設計模式中裁赠,由于視圖層殿漠、業(yè)務層數(shù)據(jù)層的分離,每個模塊之間相互獨立佩捞,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼绞幌。同樣,一個應用程序的業(yè)務流程或者業(yè)務規(guī)則的改變只需要改動MVC的模型層即可一忱。因為模型控制器視圖相分離莲蜘,所以很容易改變應用程序的數(shù)據(jù)層和業(yè)務規(guī)則。

2.高重用性和可適用性

隨著技術的不斷進步帘营,現(xiàn)在需要用越來越多的方式來訪問應用程序票渠。MVC設計模式允許用戶使用各種不同樣式的視圖來訪問同一個服務器端的代碼。它包括任何Web(HTTP)瀏覽器或者無線瀏覽器(WAP)芬迄。例如问顷,用戶可以通過計算機也可通過手機來訂購某樣產(chǎn)品,雖然訂購的方式不一樣禀梳,但處理訂購產(chǎn)品的方式是一樣的杜窄。由于模型返回的數(shù)據(jù)沒有進行格式化,所以同樣的構件能被不同的界面使用算途。例如羞芍,很多數(shù)據(jù)可能用HTML來表示,也有可能用WAP來表示郊艘,這些表示所需要的命令是改變視圖層的實現(xiàn)方式,而控制層模型層無須做任何改變唯咬。

3.較低的生命周期成本和高可維護性

MVC設計模式使視圖層業(yè)務邏輯層分離纱注,使得應用更易于維護和修改,開發(fā)和維護用戶接口的技術含量降低胆胰,技術人員只要關心指定模塊的代碼邏輯即可狞贱。

4.有利于軟件工程化管理

由于不同的層各司其職,每一層不同的應用具有某些相同的特征蜀涨,有利于通過工程化瞎嬉、工具化管理程序代碼。

  • MVC的缺點如下:
1.增加了系統(tǒng)結構和實現(xiàn)的復雜性

MVC設計模式適合用戶界面和業(yè)務邏輯比較復雜的應用程序厚柳。對于簡單的界面氧枣,嚴格遵循MVC設計模式,使模型别垮、視圖與控制器分離便监,會增加結構的復雜性,并可能產(chǎn)生過多的更新操作,降低運行效率烧董。

2.視圖與控制器間的過于緊密的連接

雖然視圖與控制器之間是相互分離的毁靶,但在實際開發(fā)中,視圖控制器確又是聯(lián)系緊密的部件逊移,視圖沒有控制器的存在预吆,其應用是很有限的,反之亦然胳泉,這樣就妨礙了它們的獨立重用拐叉。

3.視圖對模型數(shù)據(jù)的低效率訪問

依據(jù)模型操作接口的不同,視圖可能需要多次調(diào)用才能獲得足夠的顯示數(shù)據(jù)胶背。對未變化數(shù)據(jù)的不必要的頻繁訪問巷嚣,也將損害操作性能。

4.控制器臃腫

大量邏輯處理代碼全部放入ViewController控制器中钳吟,加上要遵循很多協(xié)議廷粒,會導致其變得臃腫和混亂,難以維護和管理红且,也難以分離模塊進行測試坝茎。

5.缺少專門放網(wǎng)絡邏輯代碼的部分

導致網(wǎng)絡邏輯處理只能放在Controller控制器中,加劇了Controller控制器部分的臃腫問題暇番。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嗤放,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子壁酬,更是在濱河造成了極大的恐慌次酌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舆乔,死亡現(xiàn)場離奇詭異岳服,居然都是意外死亡,警方通過查閱死者的電腦和手機希俩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門吊宋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人颜武,你說我怎么就攤上這事璃搜。” “怎么了鳞上?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵这吻,是天一觀的道長。 經(jīng)常有香客問我因块,道長橘原,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮趾断,結果婚禮上拒名,老公的妹妹穿的比我還像新娘。我一直安慰自己芋酌,他們只是感情好增显,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脐帝,像睡著了一般同云。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上堵腹,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天炸站,我揣著相機與錄音,去河邊找鬼疚顷。 笑死旱易,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的腿堤。 我是一名探鬼主播婆跑,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼吴菠,長吁一口氣:“原來是場噩夢啊……” “哼瘾英!你這毒婦竟也來了尺铣?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤酗洒,失蹤者是張志新(化名)和其女友劉穎士修,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體樱衷,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡李命,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了箫老。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡黔州,死狀恐怖耍鬓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情流妻,我是刑警寧澤牲蜀,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站绅这,受9級特大地震影響涣达,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一度苔、第九天 我趴在偏房一處隱蔽的房頂上張望匆篓。 院中可真熱鬧,春花似錦寇窑、人聲如沸鸦概。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窗市。三九已至,卻和暖如春饮笛,著一層夾襖步出監(jiān)牢的瞬間咨察,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工福青, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留摄狱,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓素跺,卻偏偏與公主長得像二蓝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子指厌,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

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