你確定你理解MVC偿警?

前言:設(shè)計模式的使用是為了使代碼邏輯清晰躏救,以一種大家普遍認(rèn)可的思路組織代碼結(jié)構(gòu),特定的模式可以解決特定的問題螟蒸,同時也便于其他人閱讀和維護盒使。MVC是一種代碼結(jié)構(gòu)組織方式,涉及到多種設(shè)計模式七嫌,包括組合模式少办、策略模式、觀察者模式诵原。

說起MVC英妓,似乎每個人都知道,MVC即Model绍赛、View蔓纠、Controller(模型、視圖吗蚌、控制器)贺纲,大部分人應(yīng)該也知道這個關(guān)系圖:


MVC關(guān)系圖

但實際開發(fā)中是否真正利用到了MVC模式的精華之處,或者說是否真的知道MVC的精華之處褪测。

我看過的大部分代碼,包括我自己以前寫的潦刃,結(jié)構(gòu)基本就是View層是界面侮措,Controller層是業(yè)務(wù)邏輯,Model層是數(shù)據(jù)結(jié)構(gòu)這樣的代碼結(jié)構(gòu)乖杠,而幾乎所有的邏輯分扎、數(shù)據(jù)操作、處理胧洒,UI模塊的調(diào)用畏吓、事件響應(yīng)都集中在Controller層(可以臃腫到好幾百行)墨状。
這樣的結(jié)構(gòu)唯一的優(yōu)點就是什么都不用考慮,上來就是直接開干菲饼,不得不說Apple基本類的封裝也是為程序員考慮肾砂,UIViewController、UIView宏悦、NSObject三者的結(jié)合使這樣的代碼結(jié)構(gòu)也看起來似乎合情合理(說實話這種樸素的代碼使用和閱讀都挺方便的镐确,所有代碼都是直來直去)。

如果沒有清晰的結(jié)構(gòu)和各自獨立的模塊封裝饼煞,在代碼量大源葫、結(jié)構(gòu)和功能相對復(fù)雜、有功能需要調(diào)整的時候這種代碼的維護就變得很麻煩了砖瞧。你有沒有過開發(fā)類似功能時要復(fù)制大量代碼的經(jīng)歷息堂?有沒有自測時感覺無從下手?有沒有在多個人開發(fā)一個功能時頻頻發(fā)生沖突块促?

MVC正是解決代碼結(jié)構(gòu)關(guān)系一種流行的方式荣堰,它和曾經(jīng)也流行過的三層架構(gòu)(UI層表示用戶界面,BLL層表示業(yè)務(wù)邏輯褂乍,DAL層表示數(shù)據(jù)訪問)極其相似持隧,而大部分人也正是把MVC當(dāng)做三層架構(gòu)在使用和理解,如果是這樣逃片,那么你可能就錯過了MVC的精華部分屡拨。

MVC設(shè)計的初衷是要將軟件用戶界面和業(yè)務(wù)邏輯分離以使代碼可擴展性、可復(fù)用性褥实、可維護性呀狼、靈活性加強。View層是界面损离,Model層是業(yè)務(wù)邏輯哥艇,Controller層用來調(diào)度View層和Model層,將用戶界面和業(yè)務(wù)邏輯合理的組織在一起僻澎。
所以Controller中的內(nèi)容應(yīng)該盡量簡潔貌踏,以提供View和Model最大的靈活性。各Model之間是可以相互調(diào)用的窟勃, Controller也可以無障礙的調(diào)用Model祖乳,因此將業(yè)務(wù)邏輯放在Model中可以靈活的使用組合的方式復(fù)用代碼。

各層關(guān)系詳解:

View—>Model —— view需要model的數(shù)據(jù)做顯示
Model—>View —— model的數(shù)據(jù)改變時需要通知view
View—>Controller —— view發(fā)生某些事件時通知Controller秉氧,而Controller根據(jù)情況通知model
Controller—>View —— Controller作為載體加載view
Controller—>Mode —— Controller調(diào)用model的業(yè)務(wù)邏輯

比方說眷昆,有一個View會提交數(shù)據(jù)給Model進行處理以實現(xiàn)具體的行為,View通常不會直接提交數(shù)據(jù)給Model,它會先把數(shù)據(jù)提交給Controller亚斋,然后Controller再將數(shù)據(jù)轉(zhuǎn)發(fā)給Model作媚。
假如此時程序業(yè)務(wù)邏輯的處理方式有變化,那么只需要在Controller中將原來的Model換成新實現(xiàn)的Model就可以了(這當(dāng)然還需要View合理的接口封裝)帅刊,控制器的作用就是這么簡單纸泡, 用來將不同的View和不同的Model組織在一起,順便替雙方傳遞消息厚掷,僅此而已弟灼。

總結(jié)MVC的好處就是:耦合性低,視圖層和業(yè)務(wù)層分離冒黑,重用性高田绑,應(yīng)用更易于維護、修改和單元測試抡爹。
但也不是沒有缺點的:①在小型規(guī)模的項目中使用會顯得殺雞用牛刀而得不償失掩驱;②視圖與控制器間連接緊密,需要定義消息傳遞接口冬竟;③視圖對模型數(shù)據(jù)的訪問效率低欧穴,視圖不直接調(diào)用模型而是使用接口,所以模型內(nèi)部可能會有多余的操作或者數(shù)據(jù)未變化而頻繁的訪問泵殴。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涮帘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子笑诅,更是在濱河造成了極大的恐慌调缨,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吆你,死亡現(xiàn)場離奇詭異弦叶,居然都是意外死亡,警方通過查閱死者的電腦和手機妇多,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門伤哺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人者祖,你說我怎么就攤上這事立莉。” “怎么了七问?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵桃序,是天一觀的道長。 經(jīng)常有香客問我烂瘫,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任坟比,我火速辦了婚禮芦鳍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘葛账。我一直安慰自己柠衅,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布籍琳。 她就那樣靜靜地躺著菲宴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪趋急。 梳的紋絲不亂的頭發(fā)上喝峦,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音呜达,去河邊找鬼谣蠢。 笑死,一個胖子當(dāng)著我的面吹牛查近,可吹牛的內(nèi)容都是我干的眉踱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼霜威,長吁一口氣:“原來是場噩夢啊……” “哼谈喳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起戈泼,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤婿禽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后矮冬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谈宛,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年胎署,在試婚紗的時候發(fā)現(xiàn)自己被綠了吆录。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡琼牧,死狀恐怖恢筝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情巨坊,我是刑警寧澤撬槽,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站趾撵,受9級特大地震影響侄柔,放射性物質(zhì)發(fā)生泄漏共啃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一暂题、第九天 我趴在偏房一處隱蔽的房頂上張望移剪。 院中可真熱鬧,春花似錦薪者、人聲如沸纵苛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽攻人。三九已至,卻和暖如春悬槽,著一層夾襖步出監(jiān)牢的瞬間怀吻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工陷谱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烙博,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓烟逊,卻偏偏與公主長得像渣窜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子宪躯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

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