欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
MVC

MVC

中科永聯(lián)高級技術(shù)培訓中心(www.itisedu.com

      MVC模式是"Model-View-Controller"的縮寫(xiě),中文翻譯為"模式-視圖-控制器"。MVC應用程序總是由這三個(gè)部分組成。Event(事件)導致Controller改變Model或View,或者同時(shí)改變兩者。只要Controller改變了Models的數據或者屬性,所有依賴(lài)的View都會(huì )自動(dòng)更新。類(lèi)似的,只要Controller改變了View,View會(huì )從潛在的Model中獲取數據來(lái)刷新自己。MVC模式最早是smalltalk語(yǔ)言研究團提出的,應用于用戶(hù)交互應用程序中。smalltalk語(yǔ)言和java語(yǔ)言有很多相似性,都是面向對象語(yǔ)言,很自然的SUN在petstore(寵物店)事例應用程序中就推薦MVC模式作為開(kāi)發(fā)Web應用的架構模式。MVC模式是一種架構模式,其實(shí)需要其他模式協(xié)作完成。在J2EE模式目錄中,通常采用service to worker模式實(shí)現,而service to worker模式可由集中控制器模式,派遣器模式和Page Helper模式組成。而Struts只實(shí)現了MVC的View和Controller兩個(gè)部分,Model部分需要開(kāi)發(fā)者自己來(lái)實(shí)現,Struts提供了抽象類(lèi)Action使開(kāi)發(fā)者能將Model應用于Struts框架中。

      MVC模式是一個(gè)復雜的架構模式,其實(shí)現也顯得非常復雜。但是,我們已經(jīng)終結出了很多可靠的設計模式,多種設計模式結合在一起,使MVC模式的實(shí)現變得相對簡(jiǎn)單易行。Views可以看作一棵樹(shù),顯然可以用Composite Pattern來(lái)實(shí)現。Views和Models之間的關(guān)系可以用Observer Pattern體現。Controller控制Views的顯示,可以用Strategy Pattern實(shí)現。Model通常是一個(gè)調停者,可采用Mediator Pattern來(lái)實(shí)現。

      現在讓我們來(lái)了解一下MVC三個(gè)部分在J2EE架構中處于什么位置,這樣有助于我們理解MVC模式的實(shí)現。MVC與J2EE架構的對應關(guān)系是:View處于Web Tier或者說(shuō)是Client Tier,通常是JSP/Servlet,即頁(yè)面顯示部分。Controller也處于Web Tier,通常用Servlet來(lái)實(shí)現,即頁(yè)面顯示的邏輯部分實(shí)現。Model處于Middle Tier,通常用服務(wù)端的javaBean或者EJB實(shí)現,即業(yè)務(wù)邏輯部分的實(shí)現。

一、MVC設計思想

  MVC英文即Model-View-Controller,即把一個(gè)應用的輸入、處理、輸出流程按照Model、View、Controller的方式進(jìn)行分離,這樣一個(gè)應用被分成三個(gè)層——模型層、視圖層、控制層。

  視圖(View)代表用戶(hù)交互界面,對于Web應用來(lái)說(shuō),可以概括為HTML界面,但有可能為XHTML、XMLApplet。隨著(zhù)應用的復雜性和規模性,界面的處理也變得具有挑戰性。一個(gè)應用可能有很多不同的視圖,MVC設計模式對于視圖的處理僅限于視圖上數據的采集和處理,以及用戶(hù)的請求,而不包括在視圖上的業(yè)務(wù)流程的處理。業(yè)務(wù)流程的處理交予模型(Model)處理。比如一個(gè)訂單的視圖只接受來(lái)自模型的數據并顯示給用戶(hù),以及將用戶(hù)界面的輸入數據和請求傳遞給控制和模型。

  模型(Model):就是業(yè)務(wù)流程/狀態(tài)的處理以及業(yè)務(wù)規則的制定。業(yè)務(wù)流程的處理過(guò)程對其它層來(lái)說(shuō)是黑箱操作,模型接受視圖請求的數據,并返回最終的處理結果。業(yè)務(wù)模型的設計可以說(shuō)是MVC最主要的核心。目前流行的EJB模型就是一個(gè)典型的應用例子,它從應用技術(shù)實(shí)現的角度對模型做了進(jìn)一步的劃分,以便充分利用現有的組件,但它不能作為應用設計模型的框架。它僅僅告訴你按這種模型設計就可以利用某些技術(shù)組件,從而減少了技術(shù)上的困難。對一個(gè)開(kāi)發(fā)者來(lái)說(shuō),就可以專(zhuān)注于業(yè)務(wù)模型的設計。MVC設計模式告訴我們,把應用的模型按一定的規則抽取出來(lái),抽取的層次很重要,這也是判斷開(kāi)發(fā)人員是否優(yōu)秀的設計依據。抽象與具體不能隔得太遠,也不能太近。MVC并沒(méi)有提供模型的設計方法,而只告訴你應該組織管理這些模型,以便于模型的重構和提高重用性。我們可以用對象編程來(lái)做比喻,MVC定義了一個(gè)頂級類(lèi),告訴它的子類(lèi)你只能做這些,但沒(méi)法限制你能做這些。這點(diǎn)對編程的開(kāi)發(fā)人員非常重要。

  業(yè)務(wù)模型還有一個(gè)很重要的模型那就是數據模型。數據模型主要指實(shí)體對象的數據 保存(持續化)。比如將一張訂單保存到數據庫,從數據庫獲取訂單。我們可以將這個(gè)模型單獨列出,所有有關(guān)數據庫的操作只限制在該模型中。

  控制(Controller)可以理解為從用戶(hù)接收請求, 將模型與視圖匹配在一起,共同完成用戶(hù)的請求。劃分控制層的作用也很明顯,它清楚地告訴你,它就是一個(gè)分發(fā)器,選擇什么樣的模型,選擇什么樣的視圖,可以完成什么樣的用戶(hù)請求??刂茖硬⒉蛔鋈魏蔚臄祿幚?。例如,用戶(hù)點(diǎn)擊一個(gè)連接,控制層接受請求后, 并不處理業(yè)務(wù)信息,它只把用戶(hù)的信息傳遞給模型,告訴模型做什么,選擇符合要求的視圖返回給用戶(hù)。因此,一個(gè)模型可能對應多個(gè)視圖,一個(gè)視圖可能對應多個(gè)模型。

模型、視圖與控制器的分離,使得一個(gè)模型可以具有多個(gè)顯示視圖。如果用戶(hù)通過(guò)某個(gè)視圖的控制器改變了模型的數據,所有其它依賴(lài)于這些數據的視圖都應反映到這些變化。因此,無(wú)論何時(shí)發(fā)生了何種數據變化,控制器都會(huì )將變化通知所有的視圖,導致顯示的更新。這實(shí)際上是一種模型的變化-傳播機制。模型、視圖、控制器三者之間的關(guān)系和各自的主要功能,如圖1所示。

二、MVC設計模式的實(shí)現

  ASP.NET提供了一個(gè)很好的實(shí)現這種經(jīng)典設計模式的類(lèi)似環(huán)境。開(kāi)發(fā)者通過(guò)在A(yíng)SPX頁(yè)面中開(kāi)發(fā)用戶(hù)接口來(lái)實(shí)現視圖;控制器的功能在邏輯功能代碼(.cs)中實(shí)現;模型通常對應應用系統的業(yè)務(wù)部分。在A(yíng)SP.NET中實(shí)現這種設計而提供的一個(gè)多層系統,較經(jīng)典的ASP結構實(shí)現的系統來(lái)說(shuō)有明顯的優(yōu)點(diǎn)。將用戶(hù)顯示(視圖)從動(dòng)作(控制器)中分離出來(lái),提高了代碼的重用性。將數據(模型)從對其操作的動(dòng)作(控制器)分離出來(lái)可以讓你設計一個(gè)與后臺存儲數據無(wú)關(guān)的系統。就MVC結構的本質(zhì)而言,它是一種解決耦合系統問(wèn)題的方法。

  2.1 視圖

  視圖是模型的表示,它提供用戶(hù)交互界面。使用多個(gè)包含單顯示頁(yè)面的用戶(hù)部件,復雜的Web頁(yè)面可以展示來(lái)自多個(gè)數據源的內容,并且網(wǎng)頁(yè)人員,美工能獨自參與這些Web頁(yè)面的開(kāi)發(fā)和維護。

  在A(yíng)SP.NET下,視圖的實(shí)現很簡(jiǎn)單??梢韵耖_(kāi)發(fā)WINDOWS界面一樣直接在集成開(kāi)發(fā)環(huán)境下通過(guò)拖動(dòng)控件來(lái)完成頁(yè)面開(kāi)發(fā)本。本文中介紹每一個(gè)頁(yè)面都采用復合視圖的形式即:一個(gè)頁(yè)面由多個(gè)子視圖(用戶(hù)部件)組成;子視圖可以是最簡(jiǎn)單HTML 控件、服務(wù)器控件或多個(gè)控件嵌套構而成的Web自定義控件。頁(yè)面都由模板定義,模板定義了頁(yè)面的布局,用戶(hù)部件的標簽和數目,用戶(hù)指定一個(gè)模板,平臺根據這些信息自動(dòng)創(chuàng )建頁(yè)面。針對靜態(tài)的模板內容,如頁(yè)面上的站點(diǎn)導航,菜單,友好鏈接,這些使用缺省的模板內容配置;針對動(dòng)態(tài)的模板內容(主要是業(yè)務(wù)內容),由于用戶(hù)的請求不同,只能使用后期綁定,并且針對用戶(hù)的不同,用戶(hù)部件的顯示內容進(jìn)行過(guò)濾。使用由用戶(hù)部件根據模板配置組成的組合頁(yè)面,它增強了可重用性,并原型化了站點(diǎn)的布局。

  視圖部分大致處理流程如下:首先,頁(yè)面模板定義了頁(yè)面的布局;頁(yè)面配置文件定義視圖標簽的具體內容(用戶(hù)部件);然后,由頁(yè)面布局策略類(lèi)初始化并加載頁(yè)面;每個(gè)用戶(hù)部件根據它自己的配置進(jìn)行初始化,加載校驗器并設置參數,以及事件的委托等;用戶(hù)提交后,通過(guò)了表示層的校驗,用戶(hù)部件把數據自動(dòng)提交給業(yè)務(wù)實(shí)體即模型。

  這一部分主要定義了WEB頁(yè)面基類(lèi)PageBase;頁(yè)面布局策略類(lèi)PageLayout,完成頁(yè)面布局,用于加載用戶(hù)部件到頁(yè)面;用戶(hù)部件基類(lèi)UserControlBase即用戶(hù)部件框架,用于動(dòng)態(tài)加載檢驗部件,以及實(shí)現用戶(hù)部件的個(gè)性化。為了實(shí)現WEB應用的靈活性,視圖部分也用到了許多配置文件例如:置文件有模板配置、頁(yè)面配置、路徑配置、驗證配置等。

  2.2 控制器

  為了能夠控制和協(xié)調每個(gè)用戶(hù)跨越多個(gè)請求的處理,控制機制應該以集中的方式進(jìn)行管理。因此,為了達到集中管理的目的引入了控制器。應用程序的控制器集中從客戶(hù)端接收請求(典型情況下是一個(gè)運行瀏覽器的用戶(hù)),決定執行什么商業(yè)邏輯功能,然后將產(chǎn)生下一步用戶(hù)界面的責任委派給一個(gè)適當的視圖組件。

  用控制器提供一個(gè)控制和處理請求的集中入口點(diǎn),它負責接收、截取并處理用戶(hù)請求;并將請求委托給分發(fā)者類(lèi),根據當前狀態(tài)和業(yè)務(wù)操作的結果決定向客戶(hù)呈現的視圖。在這一部分主要定義了HttpReqDispatcher(分發(fā)者類(lèi))、HttpCapture(請求捕獲者類(lèi))、Controller(控制器類(lèi))等,它們相互配合來(lái)完成控制器的功能。請求捕獲者類(lèi)捕獲HTTP請求并轉發(fā)給控制器類(lèi)??刂破黝?lèi)是系統中處理所有請求的最初入口點(diǎn)??刂破魍瓿梢恍┍匾奶幚砗蟀颜埱笪薪o分發(fā)者類(lèi);分發(fā)者類(lèi)分發(fā)者負責視圖的管理和導航,它管理將選擇哪個(gè)視圖提供給用戶(hù),并提供給分發(fā)資源控制。在這一部分分別采用了分發(fā)者、策略、工廠(chǎng)方法、適配器等設計模式。

  為了使請求捕獲者類(lèi)自動(dòng)捕獲用戶(hù)請求并進(jìn)行處理,ASP.NET 提供低級別的請求/響應 API,使開(kāi)發(fā)人員能夠使用 .NET 框架類(lèi)為傳入的 HTTP 請求提供服務(wù)。為此,必須創(chuàng )作支持 System.Web.IHTTPHandler 接口和實(shí)現 ProcessRequest() 方法的類(lèi)即:請求捕獲者類(lèi),并在web.config 的 <httphandlers> 節中添加類(lèi)。ASP.NET 收到的每個(gè)傳入 HTTP 請求最終由實(shí)現 IHTTPHandler 的類(lèi)的特定實(shí)例來(lái)處理。IHttpHandlerFactory 提供了處理 IHttpHandler 實(shí)例 URL 請求的實(shí)際解析的結構。HTTP 處理程序和工廠(chǎng)在 ASP.NET 配置中聲明為 web.config 文件的一部分。ASP.NET 定義了一個(gè) <httphandlers> 配置節,在其中可以添加和移除處理程序和工廠(chǎng)。子目錄繼承 HttpHandlerFactory 和 HttpHandler 的設置。 HTTP 處理程序和工廠(chǎng)是 ASP.NET 頁(yè)框架的主體。工廠(chǎng)將每個(gè)請求分配給一個(gè)處理程序,后者處理該請求。 例如,在全局 machine.config 文件中,ASP.NET 將所有對 ASPx 文件的請求映射到 HttpCapture類(lèi):

<httphandlers>
...
...
</httphandlers>

  2.3 模型

  MVC系統中的模型從概念上可以分為兩類(lèi)――系統的內部狀態(tài)和改變系統狀態(tài)的動(dòng)作。模型是你所有的商業(yè)邏輯代碼片段所在。本文為模型提供了業(yè)務(wù)實(shí)體對象和業(yè)務(wù)處理對象:所有的業(yè)務(wù)處理對象都是從ProcessBase類(lèi)派生的子類(lèi)。業(yè)務(wù)處理對象封裝了具體的處理邏輯,調用業(yè)務(wù)邏輯模型,并且把響應提交到合適的視圖組件以產(chǎn)生響應。業(yè)務(wù)實(shí)體對象可以通過(guò)定義屬性描述客戶(hù)端表單數據。所有業(yè)務(wù)實(shí)體對象都EntityBase派生子類(lèi)對象,業(yè)務(wù)處理對象可以直接對它進(jìn)行讀寫(xiě),而不再需要和request、response對象進(jìn)行數據交互。通過(guò)業(yè)務(wù)實(shí)體對象實(shí)現了對視圖和模型之間交互的支持。實(shí)現時(shí)把"做什么"(業(yè)務(wù)處理)和"如何做"(業(yè)務(wù)實(shí)體)分離。這樣可以實(shí)現業(yè)務(wù)邏輯的重用。由于各個(gè)應用的具體業(yè)務(wù)是不同的,這里不再列舉其具體代碼實(shí)例。

三、MVC設計模式的擴展

  通過(guò)在A(yíng)SP.NET中的MVC模式編寫(xiě)的,具有極其良好的可擴展性。它可以輕松實(shí)現以下功能:

 ?、賹?shí)現一個(gè)模型的多個(gè)視圖;

 ?、诓捎枚鄠€(gè)控制器;

 ?、郛斈P透淖儠r(shí),所有視圖將自動(dòng)刷新;

 ?、芩械目刂破鲗⑾嗷オ毩⒐ぷ?。

  這就是MVC模式的好處,只需在以前的程序上稍作修改或增加新的類(lèi),即可輕松增加許多程序功能。以前開(kāi)發(fā)的許多類(lèi)可以重用,而程序結構根本不再需要改變,各類(lèi)之間相互獨立,便于團體開(kāi)發(fā),提高開(kāi)發(fā)效率。下面討論如何實(shí)現一個(gè)模型、兩個(gè)視圖和一個(gè)控制器的程序。其中模型類(lèi)及視圖類(lèi)根本不需要改變,與前面的完全一樣,這就是面向對象編程的好處。對于控制器中的類(lèi),只需要增加另一個(gè)視圖,并與模型發(fā)生關(guān)聯(lián)即可。該模式下視圖、控制器、模型三者之間的示意圖如圖2所示。


  同樣也可以實(shí)現其它形式的MVC例如:一個(gè)模型、兩個(gè)視圖和兩個(gè)控制器。從上面可以看出,通過(guò)MVC模式實(shí)現的應用程序具有極其良好的可擴展性,是ASP.NET面向對象編程的未來(lái)方向。

四、MVC的優(yōu)點(diǎn)

  大部分用過(guò)程語(yǔ)言比如ASP、PHP開(kāi)發(fā)出來(lái)的Web應用,初始的開(kāi)發(fā)模板就是混合層的數據編程。例如,直接向數據庫發(fā)送請求并用HTML顯示,開(kāi)發(fā)速度往往比較快,但由于數據頁(yè)面的分離不是很直接,因而很難體現出業(yè)務(wù)模型的樣子或者模型的重用性。產(chǎn)品設計彈性力度很小,很難滿(mǎn)足用戶(hù)的變化性需求。MVC要求對應用分層,雖然要花費額外的工作,但產(chǎn)品的結構清晰,產(chǎn)品的應用通過(guò)模型可以得到更好地體現。

  首先,最重要的是應該有多個(gè)視圖對應一個(gè)模型的能力。在目前用戶(hù)需求的快速變化下,可能有多種方式訪(fǎng)問(wèn)應用的要求。例如,訂單模型可能有本系統的訂單,也有網(wǎng)上訂單,或者其他系統的訂單,但對于訂單的處理都是一樣,也就是說(shuō)訂單的處理是一致的。按MVC設計模式,一個(gè)訂單模型以及多個(gè)視圖即可解決問(wèn)題。這樣減少了代碼的復制,即減少了代碼的維護量,一旦模型發(fā)生改變,也易于維護。 其次,由于模型返回的數據不帶任何顯示格式,因而這些模型也可直接應用于接口的使用。

  再次,由于一個(gè)應用被分離為三層,因此有時(shí)改變其中的一層就能滿(mǎn)足應用的改變。一個(gè)應用的業(yè)務(wù)流程或者業(yè)務(wù)規則的改變只需改動(dòng)MVC的模型層。

  控制層的概念也很有效,由于它把不同的模型和不同的視圖組合在一起完成不同的請求,因此,控制層可以說(shuō)是包含了用戶(hù)請求權限的概念。

  最后,它還有利于軟件工程化管理。由于不同的層各司其職,每一層不同的應用具有某些相同的特征,有利于通過(guò)工程化、工具化產(chǎn)生管理程序代碼。

五、MVC的不足

  MVC的不足體現在以下幾個(gè)方面:

 ?。?)增加了系統結構和實(shí)現的復雜性。對于簡(jiǎn)單的界面,嚴格遵循MVC,使模型、視圖與控制器分離,會(huì )增加結構的復雜性,并可能產(chǎn)生過(guò)多的更新操作,降低運行效率。

 ?。?)視圖與控制器間的過(guò)于緊密的連接。視圖與控制器是相互分離,但確實(shí)聯(lián)系緊密的部件,視圖沒(méi)有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。

 ?。?)視圖對模型數據的低效率訪(fǎng)問(wèn)。依據模型操作接口的不同,視圖可能需要多次調用才能獲得足夠的顯示數據。對未變化數據的不必要的頻繁訪(fǎng)問(wèn),也將損害操作性能。

 ?。?) 目前,一般高級的界面工具或構造器不支持MVC模式。改造這些工具以適應MVC需要和建立分離的部件的代價(jià)是很高的,從而造成使用MVC的困難。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
琳婕小筑-老貓的理想 - ASP.NET下MVC設計模式的實(shí)現 -
基于StringTemplate的視圖 - Fight ! - 博客園
MVC模式簡(jiǎn)介
Django簡(jiǎn)介
MVC的概念及ASP.NET MVC 3.0開(kāi)發(fā)環(huán)境
ASP.NET MVC 入門(mén)介紹 (上)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久