posts - 19, comments - 53, trackbacks - 0, articles - 283
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          回憶 MVC

          Posted on 2009-05-23 11:18 Gavin.lee 閱讀(204) 評論(0)  編輯  收藏 所屬分類: web 積累(前端 + 后臺)
          今天外面的雨在狂飆,從凌晨飆到現(xiàn)在,似乎還沒有停的意思,剛起來,不知怎么地想起來查一下MVC,太經(jīng)典的一個模式了,現(xiàn)在基本上對我來說就沒用了,可不能忘了,于是乎從網(wǎng)上找點資料,結(jié)合自己的理解,給記錄下來,O(∩_∩)O~,要是真給忘了那就劃不來了。
          網(wǎng)絡(luò)上說的五花八門的,我就按照我目前所理解的談吧。多了我也談不了····

          MVC就是我們常說的Model2,在設(shè)計模式中,要求在Apllication開發(fā)中把商務(wù)邏輯、界面顯示、數(shù)據(jù)分離。
              Model,View,Controller
          使用java開發(fā)Web Application有幾種符合MVC設(shè)計模式的開發(fā)方式:
               <V + C + M>
          1.Jsp + servlet + javaBean(EJB)
          2.Jsp + javaBean + javaBean  <沒用過>
          4.Jsp + Struts + javaBean(EJB)

          2009-6-13 22:40:16,本來是從網(wǎng)上找文件上傳下載的,看到這篇文章挺簡練的,摘下來:http://lylyb.javaeye.com/blog/166557
          MVC英文即Model-View-Controller,即把一個應(yīng)用的輸入、處理、輸出流程按照Model、View、Controller的方式進行分離,這樣一個應(yīng)用被分成三個層——模型層、視圖層、控制層。
                 視圖(View)代表用戶交互界面,對于Web應(yīng)用來說,可以概括為HTML界面,但有可能為XHTML、XML和Applet。隨著應(yīng)用的復(fù)雜性和規(guī)模性,界面的處理也變得具有挑戰(zhàn)性。一個應(yīng)用可能有很多不同的視圖,MVC設(shè)計模式對于視圖的處理僅限于視圖上數(shù)據(jù)的采集和處理,以及用戶的請求,而不包括在視圖上的業(yè)務(wù)流程的處理。業(yè)務(wù)流程的處理交予模型(Model)處理。比如一個訂單的視圖只接受來自模型的數(shù)據(jù)并顯示給用戶,以及將用戶界面的輸入數(shù)據(jù)和請求傳遞給控制和模型。
                 模型(Model):就是業(yè)務(wù)流程/狀態(tài)的處理以及業(yè)務(wù)規(guī)則的制定。業(yè)務(wù)流程的處理過程對其它層來說是黑箱操作,模型接受視圖請求的數(shù)據(jù),并返回最終的處理結(jié)果。業(yè)務(wù)模型的設(shè)計可以說是MVC最主要的核心。目前流行的EJB模型就是一個典型的應(yīng)用例子,它從應(yīng)用技術(shù)實現(xiàn)的角度對模型做了進一步的劃分,以便充分利用現(xiàn)有的組件,但它不能作為應(yīng)用設(shè)計模型的框架。它僅僅告訴你按這種模型設(shè)計就可以利用某些技術(shù)組件,從而減少了技術(shù)上的困難。對一個開發(fā)者來說,就可以專注于業(yè)務(wù)模型的設(shè)計。MVC設(shè)計模式告訴我們,把應(yīng)用的模型按一定的規(guī)則抽取出來,抽取的層次很重要,這也是判斷開發(fā)人員是否優(yōu)秀的設(shè)計依據(jù)。抽象與具體不能隔得太遠,也不能太近。MVC并沒有提供模型的設(shè)計方法,而只告訴你應(yīng)該組織管理這些模型,以便于模型的重構(gòu)和提高重用性。我們可以用對象編程來做比喻,MVC定義了一個頂級類,告訴它的子類你只能做這些,但沒法限制你能做這些。這點對編程的開發(fā)人員非常重要。
               業(yè)務(wù)模型還有一個很重要的模型那就是數(shù)據(jù)模型。數(shù)據(jù)模型主要指實體對象的數(shù)據(jù) 保存(持續(xù)化)。比如將一張訂單保存到數(shù)據(jù)庫,從數(shù)據(jù)庫獲取訂單。我們可以將這個模型單獨列出,所有有關(guān)數(shù)據(jù)庫的操作只限制在該模型中。
            控制(Controller)可以理解為從用戶接收請求, 將模型與視圖匹配在一起,共同完成用戶的請求。劃分控制層的作用也很明顯,它清楚地告訴你,它就是一個分發(fā)器,選擇什么樣的模型,選擇什么樣的視圖,可以完成什么樣的用戶請求。控制層并不做任何的數(shù)據(jù)處理。例如,用戶點擊一個連接,控制層接受請求后, 并不處理業(yè)務(wù)信息,它只把用戶的信息傳遞給模型,告訴模型做什么,選擇符合要求的視圖返回給用戶。因此,一個模型可能對應(yīng)多個視圖,一個視圖可能對應(yīng)多個模型。

               模型、視圖與控制器的分離,使得一個模型可以具有多個顯示視圖。如果用戶通過某個視圖的控制器改變了模型的數(shù)據(jù),所有其它依賴于這些數(shù)據(jù)的視圖都應(yīng)反映到這些變化。因此,無論何時發(fā)生了何種數(shù)據(jù)變化,控制器都會將變化通知所有的視圖,導(dǎo)致顯示的更新。




          主站蜘蛛池模板: 辽宁省| 泰顺县| 德清县| 麻城市| 廊坊市| 盘山县| 屏东县| 康乐县| 海林市| 绵竹市| 边坝县| 新闻| 绥化市| 安义县| 泰安市| 绵竹市| 广汉市| 马山县| 库车县| 油尖旺区| 临安市| 龙井市| 成安县| 台湾省| 平乐县| 哈密市| 封开县| 深泽县| 麻栗坡县| 获嘉县| 方山县| 民乐县| 宜丰县| 织金县| 新密市| 连州市| 贡觉县| 玉门市| 航空| 阿鲁科尔沁旗| 延庆县|