淺談MVC模型

? ? ? ? 筆者根據(jù)自己對(duì)java Web開發(fā)的一些理解坐搔,嘗試基于JavaWeb通俗地解釋什么是MVC模型杭煎,希望能讓編程初學(xué)者更好地理解MVC編程模式纽哥,對(duì)編程初學(xué)者能有所幫助。有說得不對(duì)或不準(zhǔn)確的地方代箭,還望各路大神批評(píng)指正墩划。

? ? ? ? 首先,百度百科一段嗡综,M是指業(yè)務(wù)模型乙帮,V是指用戶界面,C則是控制器极景,使用MVC的目的是將M和V的實(shí)現(xiàn)代碼分離察净,從而使同一個(gè)程序可以使用不同的表現(xiàn)形式。

? ? ? ? 是不是看得一頭霧水戴陡?我說說我的理解塞绿。

? ? ? ? ?V(view),視圖恤批,指的是我們用戶可以直接看到的界面异吻,例如,我們?cè)L問一個(gè)網(wǎng)頁WWW.***.com喜庞,我們能從瀏覽器看到的頁面就是一個(gè)視圖View诀浪,也就是網(wǎng)頁頁面,而常見的網(wǎng)頁頁面文件有HTML文件和jsp文件延都。

? ? ? ? ?C(controller)雷猪,控制器,也叫action晰房,實(shí)質(zhì)上是Java文件里的一個(gè)方法(或叫函數(shù))求摇,這個(gè)方法是用來響應(yīng)瀏覽器的請(qǐng)求的。而每個(gè)Java文件里一般會(huì)有多個(gè)這樣的方法(函數(shù))殊者,每個(gè)方法都會(huì)響應(yīng)不同的瀏覽器請(qǐng)求与境,寫滿這些方法的Java文件,最后會(huì)統(tǒng)一放在一個(gè)文件夾(或叫包)里面猖吴,形成一個(gè)action工廠摔刁。好像還不太懂?舉個(gè)例子海蔽,上面說到了工廠共屈,那就舉個(gè)工廠的例子绑谣,一個(gè)工廠,下面有很多個(gè)部門拗引,每個(gè)部門借宵,就相當(dāng)于一個(gè)java文件,每個(gè)部門下面有很多工人寺擂,就相當(dāng)于一個(gè)java文件里面有好多個(gè)方法(函數(shù))暇务,這些工人干什么吃的?嗯怔软,當(dāng)然要響應(yīng)工廠老板的請(qǐng)求垦细。

? ? ? ? 那這個(gè)工廠老板是誰呢?自然是想要訪問某個(gè)網(wǎng)頁挡逼、或者在網(wǎng)頁上進(jìn)行某項(xiàng)操作的用戶括改,或者說瀏覽器,其實(shí)一個(gè)意思家坎,因?yàn)橛脩舻牟僮魇窃跒g覽器上進(jìn)行的嘱能,需要通過瀏覽器(對(duì)應(yīng)上述的頁面、視圖)向action工廠提交請(qǐng)求虱疏。比方說惹骂,用戶在瀏覽器上輸入了網(wǎng)址www.***.com,服務(wù)器會(huì)把這個(gè)網(wǎng)址解析成一個(gè)action方法的路徑(也就是具體定位到某個(gè)工人)做瞪,等等对粪,好像不太對(duì)?上面不是說從瀏覽器看到的是一個(gè)視圖嗎装蓬?那這個(gè)網(wǎng)址對(duì)應(yīng)的不應(yīng)該是視圖(頁面)的地址著拭?嗯,沒毛病牍帚,你網(wǎng)址確實(shí)是解析成action方法的路徑儡遮,然后,這個(gè)方法暗赶,它會(huì)想辦法找到視圖需要的各種數(shù)據(jù)鄙币,然后把這些數(shù)據(jù)扔到一個(gè)視圖里面,再把帶數(shù)據(jù)的視圖丟回瀏覽器展示給用戶蹂随。

? ? ? ? 舉個(gè)例子爱榔,現(xiàn)在有一個(gè)視圖(界面),叫個(gè)人信息糙及,而個(gè)人信息每個(gè)人是不一樣的,因此筛欢,視圖只保留每個(gè)人共有的部分浸锨,也就是模板唇聘,現(xiàn)在老板想看到張三的個(gè)人信息,就會(huì)在瀏覽器提交請(qǐng)求柱搜,這個(gè)請(qǐng)求定位到了工人A迟郎,工人A去把張三的個(gè)人信息全都拿出來了,扔到了視圖里聪蘸,然后把視圖和數(shù)據(jù)一起丟回瀏覽器展示給老板看宪肖。

? ? ? ?嗯,這就是action的工作健爬。

? ? ? ?那M(Model)又是啥玩意呢控乾?model層(又叫數(shù)據(jù)層或service層),是專門與數(shù)據(jù)庫打交道娜遵,為action工廠提供服務(wù)的工具蜕衡。再用上面工廠的例子,有一天设拟,老板想要看2016年每個(gè)季度的銷售額是多少慨仿,然后請(qǐng)求提交給了工人A,工人A加班了2天纳胧,統(tǒng)計(jì)出來給老板看镰吆。

? ? ? ?然后,老板突然又想看看2016年每個(gè)季度銷售額分別比2015年多多少跑慕,這個(gè)請(qǐng)求提交給了工人B万皿,工人B先加班兩天,把2016年每個(gè)季度銷售額統(tǒng)計(jì)出來相赁,然后再加班兩天相寇,把2015年銷售額統(tǒng)計(jì)出來,再作對(duì)比統(tǒng)計(jì)給老板看钮科。

? ? ? ?又有一天唤衫,老板想根據(jù)2016年各個(gè)季度銷售額,預(yù)測(cè)2017年每個(gè)銷售額是多少绵脯,這個(gè)請(qǐng)求提交給工人C佳励,工人C先加班兩天,把2016年每個(gè)季度銷售額統(tǒng)計(jì)出來蛆挫,然后再加班兩天赃承,把2017年銷售額預(yù)測(cè)出來交給老板看。

? ? ? ? 后來某一天悴侵,這三個(gè)工人坐在一起聊天瞧剖,發(fā)現(xiàn),怎么我們做了那么多重復(fù)的工作呢,于是抓于,他們決定請(qǐng)來一群奴隸做粤,為他們服務(wù),把這些冗余重復(fù)的工作都丟給這群奴隸捉撮,這些奴隸怕品,把各種與數(shù)據(jù)打交道的工作都做好了,工人再接收到老板請(qǐng)求時(shí)巾遭,不需要自己再進(jìn)行統(tǒng)計(jì)肉康,而是直接問奴隸拿這些數(shù)據(jù),工人不再需要關(guān)心這些數(shù)據(jù)是怎么來的灼舍,需要什么吼和,問奴隸要。

? ? ? ? 回到開發(fā)層面片仿,比如現(xiàn)在有兩個(gè)頁面纹安,兩個(gè)頁面都需要同一組數(shù)據(jù):該門課程所有章節(jié)。因?yàn)椴煌撁妫ㄒ晥D)對(duì)應(yīng)的是兩個(gè)不同的action方法砂豌,如果把獲取該門課程所有章節(jié)代碼寫在action方法里厢岂,那這兩個(gè)方法就會(huì)重復(fù)寫這部分代碼,為了避免代碼冗余阳距,model(或叫service)橫空出世塔粒,這個(gè)層面匯集了所有涉及到數(shù)據(jù)增刪改查的代碼,action方法只負(fù)責(zé)響應(yīng)頁面請(qǐng)求和返回?cái)?shù)據(jù)筐摘,數(shù)據(jù)怎么來卒茬?它不管,直接找service要去咖熟。

? ? ? ? ?嗯圃酵,這就是著名的MVC模型,MVC模型馍管,說白了就是一套定義如何進(jìn)行分工協(xié)作的思想郭赐。在過去的開發(fā)過程中,由于沒有很好地進(jìn)行定義分工确沸,會(huì)導(dǎo)致大量的代碼冗余捌锭。因此一群大牛坐下來討論開會(huì),討論出了一種可以大大提高開發(fā)效率和較少代碼冗余的分工思想罗捎,并命名為MVC模型观谦。其中,V就負(fù)責(zé)定義視圖模板桨菜,C就負(fù)責(zé)接收請(qǐng)求并找M拿數(shù)據(jù)然后放到V再丟回瀏覽器豁状;M就負(fù)責(zé)與數(shù)據(jù)打交道捉偏,定義了各種增刪改查的方法。

? ? ? ? 還不懂替蔬?出門右轉(zhuǎn)擼代碼去告私,邊擼邊理解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市承桥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌根悼,老刑警劉巖凶异,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異挤巡,居然都是意外死亡剩彬,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門矿卑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喉恋,“玉大人,你說我怎么就攤上這事母廷∏岷冢” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵琴昆,是天一觀的道長(zhǎng)氓鄙。 經(jīng)常有香客問我,道長(zhǎng)业舍,這世上最難降的妖魔是什么抖拦? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮舷暮,結(jié)果婚禮上态罪,老公的妹妹穿的比我還像新娘。我一直安慰自己下面,他們只是感情好复颈,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诸狭,像睡著了一般券膀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驯遇,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天芹彬,我揣著相機(jī)與錄音,去河邊找鬼叉庐。 笑死舒帮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播玩郊,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼肢执,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了译红?” 一聲冷哼從身側(cè)響起预茄,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎侦厚,沒想到半個(gè)月后耻陕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刨沦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年诗宣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片想诅。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颖对,死狀恐怖锥腻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤犁河,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布奥洼,位于F島的核電站廓奕,受9級(jí)特大地震影響茴她,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晌坤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一逢艘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧骤菠,春花似錦它改、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鹉戚,卻和暖如春鲜戒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抹凳。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工遏餐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赢底。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓失都,卻偏偏與公主長(zhǎng)得像柏蘑,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子粹庞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,734評(píng)論 25 707
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法咳焚,類相關(guān)的語法,內(nèi)部類的語法庞溜,繼承相關(guān)的語法革半,異常的語法,線程的語...
    子非魚_t_閱讀 31,597評(píng)論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理流码,服務(wù)發(fā)現(xiàn)督惰,斷路器,智...
    卡卡羅2017閱讀 134,628評(píng)論 18 139
  • 射擊場(chǎng)旅掂。 瞄準(zhǔn)靶子 三,二访娶,一 叭 叭 叭 一連三槍 把槍放下 誰敢動(dòng)試試商虐! 土匪,強(qiáng)盜 日寇崖疤,漢奸 扒下你們...
    砥洎游子閱讀 304評(píng)論 1 1
  • 文/塵間紅葉 01 前些日子秘车,回母親家,她悄悄對(duì)我說劫哼,老家的小丫姑姑打電話叮趴,要來城里探望兒子,順便來家里看看权烧。姑姑...
    塵間紅葉閱讀 270評(píng)論 10 12