程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET的MVC設計模式

ASP.NET的MVC設計模式

編輯:關於ASP.NET

當開發者聽到“設計模式”這個詞時,他們通常聯想到兩個場景。 一組開發者正在討論許多創造性意見,正在開會,但是卻沒有進行編碼。另外一 組人能制定出正確的計劃,保證系統能夠開發成功,代碼可以重用。

而現實一般都處於兩者中間。在為他們的公司設計解決方案的時候,結構設計 者和系統設計者應該尋找重復的模式。但是模式只是開發健壯、可重用代碼的一 個指導。結構設計者不能過多的去設計一個解決方案的結構,因為要定期交貨。

過多的設計系統結構的主要受害者是Web應用程序。因為多數Web應用程序是用 來浏覽數據的,它們設計的目標是數據顯示的速度能跟得上數據更新的速度。在 很多情況下,建立一個復雜的、多層次的體系結構並不是為了滿足用戶或者開發 者的需要。讓我們看看開發.NET Web應用程序的一個簡單的例子:

用ASP.NET實現一個經典的設計模式

Smalltalk,最早的一種面向對象的編程語言,給開發者提供了一個快速開發 面向對象系統的平台。經典的Model, View, Controller(MVC)設計模式就是從 這個研究上發展起來的,並且現在仍在作為一個參考模型使用。Model保存由View 顯示,由Controller控制的數據。View負責向用戶發送輸出,Controller負責反 應用戶的動作並相應地更新Model。

ASP.NET提供了一個很好的實現這種經典設計模式的類似環境。開發者通過在 ASPX頁面中開發用戶接口來實現View。Controller功能在邏輯功能代碼(code- behind)文件(Foo.aspx.vb或者Foo.aspx.cs)中實現。

在.NET中實現這種設計提供了一個兩層的系統,較經典的ASP結構來說有明顯 的優點。將用戶顯示(View)從動作(Controller)中分離出來提高了代碼的重 用性。將數據(Model)從對其操作的的動作(Controller)分離出來可以讓你設 計一個與後台存儲數據無關的系統。

如果設計正確的話,一個基於MVC設計模式的系統將不會知道、也不會關心提 供給Model組件的數據是存儲在SQL Server或是Oracle數據庫中,還是存儲在一組 XML文檔中。

很多人會說,開發者可以使用ASP頁面和COM對象很容易地實現這種模式。但是 事實是,我檢查的多數系統根本沒有使用COM對象,或者只是使用COM對象來訪問 數據庫;他們依然在ASP頁面中嵌入腳本來完成商業邏輯。我並不是說MVC模式提 倡在ASP頁面中不使用腳本。我只是說在ASP頁面中的腳本應該只局限於用來支持 View功能和Controller功能。

性能和可擴展性

當設計一個基於這種模式的解決方案時,一定要考慮到另外兩個問題。首先, 這個解決方案的性能如何,我們怎麼提升其性能?第二,這個解決方案的可擴展 性和可升級性如何,什麼地方值得擴展或者打破這種模式?

性能

盡管從Controller和View中訪問Model將是獨立於具體數據庫的,但並不意味 著Model自己不能被優化。因為ADO DataSet不關心數據源,通過采用數據庫專有 的優點不用打破這種模式就可以提高系統性能。例如,相比在你的邏輯功能代碼 文件(Controller)中使用嵌入的SQL Select語句,我們可以使用存儲過程根據 給的參數返回想要的值,這種效果會好些。存儲過程不僅僅是被數據庫中預編譯 好的,它們還有一個預先確定的執行路徑,所以其執行得更快,效率更高。

然而如果你使用存儲過程來處理商業邏輯的話,你可能會打破這種模式。這些 商業邏輯本應該屬於Controller的,允許多個視圖使用它們。通常你會用數據庫 專有的特征來優化系統性能或者強迫引用完整性,但不要用來實現Controller特 征。

可擴展性和可升級性

為了能成功地進行升級,一個MVC模式的應用程序不得不工作在Web服務器群下 。只要你設計你的應用程序為無狀態的或者在View和用戶間維持狀態(ASP.NET缺 省為開發這種應用程序),你就能通過簡單地將你的ASPX頁面和邏輯功能文件復 制到一個服務器群的多個IIS服務器上,全都指向同一個數據庫服務器。

當實現這種模式時,我發現將邏輯Controller層分離為兩個物理層很有用。相 比在Controller層中在多個方法中復制使用同樣的數據訪問,我更樂意將所有的 代碼合並在一個單獨的數據訪問對象中,由它來完成該應用程序所有的數據訪問 。微軟提供了一個比較大的例子,就是將數據訪問應用模塊全部合並到一個數據 訪問層中,你可以從MSDN中下載這個例子。集中的數據訪問提升了代碼重用性, 但更重要的是,通過使用實際容量設置連接可以保證你的應用程序使用連接池。

以更快的速度開發更好的軟件

使用設計模式能幫助你建立更可靠、更易維護的軟件。當給你的客戶設計系統 結構時,你首先應該考慮建立基於著名設計模式的應用程序,然後再根據需要和 性能要求來擴展這些設計模式。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved