国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

初探ASP.NET MVC設計模式

2018-12-28 20:41侯永剛
科學與財富 2018年30期
關鍵詞:設計模式視圖控制器

侯永剛

摘要:MVC是一種軟件架構的思想,該設計模式目前在很多領域都有著廣泛的應用前景,2009年,ASP.NET MVC1.0正式版上市,到目前已發(fā)展到了MVC5。ASP.NET MVC非常強調“關注點分離”的概念,而且從開發(fā)上來看就很容易讓開發(fā)人員做到“關注點分離”,這個優(yōu)勢是Web Form完全無法匹敵的。本文簡要闡述了ASP.NET MVC設計模式的概念,基本思想及其應用。

關鍵詞:設計模式;ASP.NET MVC;MVC;控制器;視圖

一、MVC設計模式概述

MVC不是一種程序語言,嚴格說起來也不算是個技術,而是開發(fā)時所使用的一種“架構(框架)”。它就像是一種開發(fā)觀念,或是一個存在已久的設計模式。

MVC最早是在1979年由Trygve Reenskaug所提出,并且應用于當時火紅的Smalltalk程序語言中。之所以會提出MVC的概念,主要目的就在于簡化軟件開發(fā)的復雜度,以一種概念簡單卻又權責分明的架構,貫穿整個軟件開發(fā)流程,通過“商業(yè)邏輯層”與“數據表現層”的切割,讓這兩部分的信息切割開來,用以撰寫出更模塊化、可維護性高的程序代碼。

MVC是一種軟件架構的思想,將一個軟件按照模型、視圖、控制器進行劃分。其中,模型用來封裝業(yè)務邏輯,視圖用來實現表示邏輯,控制器用來協(xié)調模型與視圖(視圖要通過控制器來調用模型,模型返回的處理結果也要先交給控制器,由控制器來選擇合適的視圖來顯示處理結果)。

模型:負責定義信息格式與信息訪問的界面,包括商業(yè)邏輯與信息驗證。

視圖:負責用戶界面(UI)相關呈現,包括輸入與輸出。

控制器:負責控制系統(tǒng)運行的流程、跟瀏覽器如何交互、決定網頁操作的流程與動線、響應客戶端的各種要求、錯誤處理。

二、初探ASP.NET MVC

ASP.NET WebForm時,常用的開發(fā)模式也將整個應用程序分解為三個層次分別是表示層、事務層、數據訪問層,那么ASP.NET MVC的三層與原三層架構的關系是什么呢?

ASP.NET MVC僅僅是對原三層架構中的表示層進行解耦,主要實現HTML與C#代碼的分離。因此,其三層的功能主要如下:

View:視圖層,負責所有呈現在用戶面前的東西,最簡單的說法就是輸出與輸入。輸出工作就是呈現在瀏覽器上的界面,例如HTMl等;輸入工作就是將用戶輸入的數據傳回服務器,例如,在瀏覽器上呈現表單讓用戶輸入。

Model:模型,負責定義信息格式,對應應用狀態(tài)和業(yè)務功能的封裝,可以將它理解為同時包含數據和行為的領域模型(Domain Model)。Model接受Controller的請求并完成相應的業(yè)務處理。

Controller:控制器,接收用戶的請求、決定呈現哪個View(視圖)、接收用戶輸入的數據。

1.控制器

MVC模式中的控制器(Controller)主要負責響應用戶的輸入,并且在響應時修改模型(Model)。通過這種方式,MVC模式中的控制器主要關注的是應用程序流、輸入數據的處理,以及對相關視圖(View)輸出數據的提供。

過去的Web服務器支持訪問以靜態(tài)文件存儲在磁盤上的HTML頁面。隨著動態(tài)網頁的盛行,Web服務器也支持由存儲在服務器上的動態(tài)腳本生成的HTML頁面。MVC則略不同。URL首先告知路由機制去實例化哪個控制器,調用哪個操作方法,并為該方法提供需要的參數。然后控制器的方法決定使用哪個視圖,并對該視圖進行渲染。

URL并不與存儲在Web服務器磁盤上的文件有直接對應關系,而是與控制器類的方法有關。ASP.NET MVC對MVC模式中的前端控制器進行了改進,路由子系統(tǒng)在前面,之后才是控制器。

理解MVC模式在Web場景中工作原理的簡單方法就是記住:MVC提供的是方法調用結果,而不是動態(tài)生成(又名腳本)頁面。

2.模型

模型這個詞在軟件開發(fā)領域被多次引用,代表數百種不同的概念,如成熟度模型、設計模型、威脅模型和進程模型等。很少有開發(fā)會議會自始自終都不談一兩種模型的。即便把“模型”這個術語的范圍限定在MVC設計模式的上下文中,也仍然可以探討面向業(yè)務的模型對象和面向視圖的模型對象哪個更具有優(yōu)勢。

ASP.NET MVC中討論的是那些發(fā)送信息到數據庫,執(zhí)行業(yè)務計算并在視圖中渲染的模型對象。換句話說,這些對象代表著應用程序關注的域,模型就是要顯示、保存、更新和刪除的對象。

為了僅使用模型對象的定義就能構建出應用程序特性,ASP.NET MVC5提供了許多工具和特性?,F在就應該坐下來好好想一想要解決的問題,然后為了呈現涉及的主要對象,就要編寫一些簡單的C#類。準備好了上面的工作,接下來就可以使用MVC提供的工具來為每個模型對象的標準索引、創(chuàng)建、編輯和刪除功能構建控制器和視圖。

3.視圖

開發(fā)人員之所以花費大量的時間來重點設計控制器和模型對象,是因為在這些領域中,精心編寫的整潔代碼是開發(fā)一個可維護Web應用程序的基礎。

但是當用戶在瀏覽器中訪問Web應用程序時,這些工作他們是看不到的。用戶對應程序的第一印象,以及與應用程序的整個交互過程都是從視圖開始的。

視圖實際上就是應用程序的“大使”。顯而易見,如果應用程序的其他部分存在錯誤,那么設計再好,再沒有瑕疵的視圖也不能彌補這方面的不足。同樣,如果創(chuàng)建一個丑陋且難以利用的視圖,那么許多用戶將不會給應用程序提供證明它的功能多么強大、運行多么順暢的機會。

控制器可以返回輸出字符串到瀏覽器。但在一些重大的Web應用程序中,大部分的控制器操作需要以HTML格式動態(tài)顯示信息。如果控制器操作僅僅返回字符串,那么就需要有大量的字符串替換操作,這樣就會變得混亂不堪。因此,模板系統(tǒng)的需要越來越清晰,此時,視圖應運而生。

視圖的職責是向用戶提供界面。當控制器針對被請求的URL執(zhí)行完合適的邏輯后,就將要顯示的內容委托給視圖。

不像基于文件的Web框架,比如ASP.NET Web Forms和PHP,視圖本身不會被直接訪問,瀏覽器不能直接指向一個視圖并渲染它。相反,視圖總是被控制器渲染,因為控制器為它提供了要渲染的數據。

在一些簡單的情況中,視圖不需要或需要很少控制器提供的信息。更常見的情況則是控制器需要向視圖提供一些信息,所以它會傳遞一個數據轉移對象,叫做模型。視圖將這個模型轉換為一種適合顯示給用戶的格式。在ASP.NET MVC中,完成這一過程由兩部分操作,其中一個是檢查由控制器提交的模型對象,另一個是將其內容轉換為HTML格式。

三、 ASP.NET MVC的開發(fā)觀念

在MVC模式的開發(fā)中,應該具有正確的開發(fā)觀念,強大的工具若沒有正確的觀念支持,就像是給你一臺馬力強又省油的手動檔汽車,而你卻不知道離合器該如何正確使用,也許在開了一段時間之后,覺得車子還是開不快。

1.常見的問題有以下幾點

1)把Model理解成實體類(Entity)

在MVC中Model應該包含兩部分功能,一部分是處理業(yè)務邏輯,一部分是提供View顯示的數據。

它應該是業(yè)務邏輯真正的實現層。所以Model實際上是Bussiness Model(業(yè)務模型)。而Controller僅僅起一個“橋梁”作用,它負責把View的請求轉發(fā)給Model,再負責把Model處理結束的消息通知View。Controller的存在是為了使UI界面、UI邏輯、業(yè)務邏輯之間分離。

2)大量業(yè)務邏輯代碼堆積在Controller端

MVC的控制器,內里封裝了通訊,容易變成大而全的高度耦合的集中器。比如將業(yè)務邏輯寫在控制器里。

2.正確的開發(fā)觀念

1)關注點分離

關注點分離的意思就是,當你在進行軟件開發(fā)時,可以只關注于當前的對象上,一次僅關注于一個較容易理解與解決的部分,不要受到相同系統(tǒng)中其他對象的干擾,也包括對對象所做出的修正不會影響到其他對象的動作,能夠專注于完成手邊的工作,不但容易提升軟件質量,也可加快程序代碼理解的速度。

2)以習慣替換配置

以習慣替換配置是一種軟件設計模式,主要目的在于減少開發(fā)人員在架構時所決策的時間以及降低軟件設計過于彈性,而導致太復雜的情況,通過約定俗成的“開發(fā)習慣”,讓同一群人員得以共享同一套設計架構,減少思考時間,降低溝通成本,且不失軟件開發(fā)的彈性。

四、ASP.NET MVC應用中的請求處理

ASP.NET MVC開發(fā)模式不同于WebForm方式,不能直接訪問視圖,必須通過控制器,那么很多人可能會不理解其資源的請求處理方式,以下簡要介紹其請求處理過程。

1.每個HTTP請求的目標是Controller中的一個Action,具體體現為定義在Controller類型中的一個public方法。所以對請求的處理最終體現為對目標Controller對象的激活和對目標Action方法的執(zhí)行。

2.Controller的類型和Action方法的名稱及作為Action方法的部分參數可以直接通過請求的Url解析出來。

3.通過一個攔截器對抵達Web服務器的HTTP請求進行攔截。這個攔截器根據當前請求解析出目標Controller的類型和對應的Action方法的名稱,隨后目標Controller被激活,相應的Action方法被執(zhí)行。

4.Action方法執(zhí)行過程中,可以調用Model獲取相應的數據及改變其狀態(tài)。在Action執(zhí)行的最后階段一般會創(chuàng)建出一個View,后者最終被轉換為HTML以HTTP響應的形式返回到客戶端。

5.綁定在View上的數據被稱為ViewModel,來源于Model或者基于顯示要求進行的簡單邏輯計算。

五、總結

在軟件的開發(fā)中,最常發(fā)生的問題就是需求的變化。經常改變的需求,對于軟件質量與可維護性有很大的殺傷力,但這是事實,我們無法改變。而MVC設計模式以一種概念簡單卻又權責分明的架構,通過商業(yè)邏輯與數據表現的分離,可以撰寫出更模塊化、可維護性高的程序代碼。本文介紹了MVC模式的基本概念;ASP.NET MVC的三個基本部件及其間關系;并對ASP.NET MVC開發(fā)的正確觀念與其HTTP請求的處理過程進行了簡要的介紹,便讀者對ASP.NET MVC應用程序的開發(fā)有一個全面而正確的理解與認識。

參考文獻:

[1]黃保翕.ASP.NET MVC4開發(fā)指南[M].清華大學出版社,2013年

[2]鄒瓊俊.ASP.NET MVC企業(yè)級實戰(zhàn)[M]:清華大學出版社,2017年

[3]弗瑞曼[美].精通ASP.NET MVC5[M]:人民郵電出版社,2016年

猜你喜歡
設計模式視圖控制器
“1+1”作業(yè)設計模式的實踐探索
三維協(xié)同設計模式下的航天項目管理實踐與展望
交通機電工程設計模式創(chuàng)新探討
5.3 視圖與投影
視圖
Y—20重型運輸機多視圖
SA2型76毫米車載高炮多視圖
模糊PID控制器設計及MATLAB仿真
MOXA RTU控制器ioPAC 5542系列
倍福 CX8091嵌入式控制器