當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]  ASP.NET是微軟最新推出的新型體系結(jié)構(gòu).NET框架的一部分,它為構(gòu)造新一代動(dòng)態(tài)網(wǎng)站和基于網(wǎng)絡(luò)的分布式應(yīng)用提供了強(qiáng)有力的支持。與以前的 Web 開(kāi)發(fā)模型相比,ASP.NET 提供了許多重要的優(yōu)點(diǎn)

  ASP.NET是微軟最新推出的新型體系結(jié)構(gòu).NET框架的一部分,它為構(gòu)造新一代動(dòng)態(tài)網(wǎng)站和基于網(wǎng)絡(luò)的分布式應(yīng)用提供了強(qiáng)有力的支持。與以前的 Web 開(kāi)發(fā)模型相比,ASP.NET 提供了許多重要的優(yōu)點(diǎn)例如: 簡(jiǎn)易性;安全性;可管理性等。而且與基于過(guò)程的ASP頁(yè)面技術(shù)相比,面向?qū)ο蠹夹g(shù)在ASP.NET中得到了完全實(shí)現(xiàn)。用傳統(tǒng)ASP技術(shù)建立的Web應(yīng)用實(shí)例中,在頁(yè)面中同時(shí)實(shí)現(xiàn)顯示,業(yè)務(wù)邏輯和流程控制,這從工程化的角度考慮,它有許多不足之處。用戶界面承擔(dān)著向用戶顯示問(wèn)題模型和與用戶進(jìn)行操作和I/O交互的作用。用戶希望保持交互操作界面的相對(duì)穩(wěn)定,但更希望根據(jù)需要改變和調(diào)整顯示的內(nèi)容和形式。在.NET框架下ASP.NET技術(shù)結(jié)合MVC設(shè)計(jì)模式很好地解決了上述問(wèn)題。

  1 MVC設(shè)計(jì)模式簡(jiǎn)介

  MVC由Trygve Reenskaug提出,首先被應(yīng)用在SmallTalk-80環(huán)境中,是許多交互和界面系統(tǒng)的構(gòu)成基礎(chǔ)。MVC結(jié)構(gòu)是為那些需要為同樣的數(shù)據(jù)提供多個(gè)視圖的應(yīng)用程序而設(shè)計(jì)的,它很好的實(shí)現(xiàn)了數(shù)據(jù)層與表示層的分離。MVC作為一種開(kāi)發(fā)模型,通常用于分布式應(yīng)用系統(tǒng)的設(shè)計(jì)和分析中,以及用于確定系統(tǒng)各部分間的組織關(guān)系。對(duì)于界面設(shè)計(jì)可變性的需求,MVC(Model-View-Controller)把交互系統(tǒng)的組成分解成模型、視圖、控制器三種部件。

  視圖部件把表示模型數(shù)據(jù)及邏輯關(guān)系和狀態(tài)的信息以特定形式展示給用戶。它從模型獲得顯示信息,對(duì)于相同的信息可以有多個(gè)不同的顯示形式或視圖。

  控制器部件是處理用戶與軟件的交互操作的,其職責(zé)是控制提供模型中任何變化的傳播,確保用戶界面于模型間的對(duì)應(yīng)聯(lián)系;它接受用戶的輸入,將輸入反饋給模型,進(jìn)而實(shí)現(xiàn)對(duì)模型的計(jì)算控制,是使模型和視圖協(xié)調(diào)工作的部件。

  模型部件保存由視圖顯示,由控制器控制的數(shù)據(jù);它封裝了問(wèn)題的核心數(shù)據(jù)、邏輯和功能的計(jì)算關(guān)系,它獨(dú)立于具體的界面表達(dá)和I/O操作。

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

  2 MVC設(shè)計(jì)模式的實(shí)現(xiàn)

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

  2.1 視圖

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

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

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

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

  2.2 控制器

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

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

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

<httphandlers>
...
<add verb="*" path="*.ASPx" type="Sys.UI.HttpCapture, Sys.UI"/>
...
</httphandlers>

  2.3 模型

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

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

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

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

  ③當(dāng)模型改變時(shí),所有視圖將自動(dòng)刷新;

 ?、芩械目刂破鲗⑾嗷オ?dú)立工作。

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

圖 2 視圖、控制器、模型三者之間關(guān)系的示意圖

  同樣也可以實(shí)現(xiàn)其它形式的MVC例如:一個(gè)模型、兩個(gè)視圖和兩個(gè)控制器。從上面可以看出,通過(guò)MVC模式實(shí)現(xiàn)的應(yīng)用程序具有極其良好的可擴(kuò)展性,是ASP.NET面向?qū)ο缶幊痰奈磥?lái)方向。
  4 MVC設(shè)計(jì)模式的優(yōu)點(diǎn)及不足之處

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

  MVC的優(yōu)點(diǎn)體現(xiàn)在以下幾個(gè)方面:

 ?。?) 可以為一個(gè)模型在運(yùn)行時(shí)同時(shí)建立和使用多個(gè)視圖。變化-傳播機(jī)制可以確保所有相關(guān)的視圖及時(shí)得到模型數(shù)據(jù)變化,從而使所有關(guān)聯(lián)的視圖和控制器做到行為同步。

  (2) 視圖與控制器的可接插性,允許更換視圖和控制器對(duì)象,而且可以根據(jù)需求動(dòng)態(tài)的打開(kāi)或關(guān)閉、甚至在運(yùn)行期間進(jìn)行對(duì)象替換。

 ?。?) 模型的可移植性。因?yàn)槟P褪仟?dú)立于視圖的,所以可以把一個(gè)模型獨(dú)立地移植到新的平臺(tái)工作。需要做的只是在新平臺(tái)上對(duì)視圖和控制器進(jìn)行新的修改。

  (4) 潛在的框架結(jié)構(gòu)。可以基于此模型建立應(yīng)用程序框架,不僅僅是用在設(shè)計(jì)界面的設(shè)計(jì)中。

  4.2 MVC的不足之處

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

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

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

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

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

  5 結(jié)束語(yǔ)

  與軟件所處理問(wèn)題的內(nèi)在模型相比較,用戶界面是需要經(jīng)常發(fā)生變化的,采用MVC設(shè)計(jì)模式可以在滿足對(duì)界面要求的同時(shí),使軟件的計(jì)算模型獨(dú)立于界面的構(gòu)成。也可以基于此模型建立大型分布式應(yīng)用程序框架。本文介紹了MVC設(shè)計(jì)模式的原理;MVC設(shè)計(jì)模式三個(gè)組成構(gòu)件(模型部件、視圖部件和控制部件)以及在ASP.NET環(huán)境下實(shí)現(xiàn)基于MVC的應(yīng)用需要完成的工作;MVC設(shè)計(jì)模式的擴(kuò)展;最后對(duì)MVC的優(yōu)點(diǎn)及不足之處進(jìn)行了分析。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉