1. 程式人生 > >asp.net webform設計思路的思考

asp.net webform設計思路的思考

感覺 基於組 優勢 cti 插入 網站 體系 邏輯與 註意

我使用asp.net的webform框架進行web應用程序的開發已經差不多四年了,在整個開發生涯中,也使用過一年asp.net的mvc框架。因為網上經常有討論webform框架和mvc框架的優劣,所以自己也對這兩者進行了關註,因為自己最熟悉webform框架,所以就會考慮它的優勢是什麽?設計思路是什麽?

要理解asp.net的設計思路,必須考慮它的產生年代,產生的技術基礎,還有觀察同時代其他動態網頁技術的特點和思路。

首先是產生asp.net的技術基礎,以下援引百度百科:

“1996年,ASP 1.0(Active Server Pages)版本出現了,它引起了Web開發的新革命,降低了動態網頁開發的難度。以前開發動態網頁需要編寫大量繁雜的C代碼,編程效率非常低下,而且需要Web網頁開發者掌握非常高的編程技巧。而ASP使用簡單的腳本語言,能夠將代碼直接嵌入HTML,使設計Web頁面變得更簡單。雖然ASP非常簡單,但卻能夠實現非常強大的功能,這一切得益於其組件。特別是ADO組件,使得在網頁中訪問數據庫易如反掌。這一切推動了動態網頁的快速發展與建設,同時使ASP得到迅速流行。

1998年,微軟公司發布了ASP 2.0,它是作為Windows NT 4 Option Pack的一部分提供的。ASP 2.0與ASP 1.0的主要區別是外部的組件可以初始化,使所有的組件都有了獨立的內存空間,並且可以進行事務處理。內置的Microsoft Transaction Server(MTS)使制作組件變得更容易。 2000年6月,微軟公司宣布了自己的.NET框架。.NET框架的基本思想是:把原有的重點從連接到互聯網的單一網站或設備轉移到計算機、設備和服務群組上,而將互聯網本身作為新一代操作系統的基礎。這樣,用戶將能夠控制信息的傳送方式、時間和內容,從而得到更多的服務。 2001年,ASP.NET浮出水面。它最初的名字為ASP+,後來改為ASP.NET。ASP.NET是微軟公司開發的一種建立在.NET之上的Web運行環境,它不是ASP的簡單升級,而是新一代的Active Server Pages。ASP.NET是微軟公司新體系結構Microsoft.NET的一部分,其中全新的技術架構使編程變得更加簡單。借助於ASP.NET,可以創造出內容豐富的、動態的、個性化的Web站點。ASP.NET簡單易學、功能強大、應用靈活、擴展性好,可以使用任何.NET兼容語言。 [4-5]
2002年微軟發布.NET正式版本.NET Framework 1.0,其中的ASP版本就是ASP.NET 1.0,在此以前發布了兩個.NET測試版本Betal和Beta2。 2003年微軟發布了.NET Frameworrk 1.1正式版,其中ASP版本就是ASP.NET 1.1。 2005年微軟發布.NET Framework 2.0正式版本,也就是ASP.NET 2.0。” 這是一段引自百度百科,介紹從asp發展到asp.net的記述。閱讀這段記述你應該意識到,asp.net是從asp1.0開始發展來的,但是它不是直接從asp發展到asp.net的,首先是asp1.0,然後是asp2.0,然後是asp+,再然後改名為asp.net(這裏如果分開看就是asp 、 .net這是兩個詞,因為在asp的發展過程中另一個大的項目.net出現了,.net為什麽出現,不在討論範圍,可以自行百度)。asp.net1.1技術的web框架就是webform。 雖然我沒打算梳理敘述.net的產生和發展,但是asp.net webform的產生卻和.net平臺非常緊密。 在asp產生的前兩年,產生了另外一個非常有名的動態網頁技術,那就是PHP。這裏援引一下php的概念: “PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。”
php的產生早於asp技術,asp應該是吸收有php技術的建造思想的,之所以稱為建造,是因為php的起點非常低,並沒有被進行充分的設計,它是從一個小工具快速發展起來的。這裏還想提一下另外一個重要的動態網頁技術,再次援引下百度百科: “ “JSP全名為Java Server Pages,中文名叫java服務器頁面,其根本是一個簡化的Servlet設計,它 [1] 是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標準。JSP技術有點類似ASP技術,它是在傳統的網頁HTML(標準通用標記語言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP標記(tag),從而形成JSP文件,後綴名為(*.jsp)。 用JSP開發的Web應用是跨平臺的,既能在Linux下運行,也能在其他操作系統上運行。 它實現了Html語法中的java擴展(以 <%, %>形式)。JSP與Servlet一樣,是在服務器端執行的。通常返回給客戶端的就是一個HTML文本,因此客戶端只要有瀏覽器就能瀏覽。 JSP技術使用Java編程語言編寫類XML的tags和scriptlets,來封裝產生動態網頁的處理邏輯。網頁還能通過tags和scriptlets訪問存在於服務端的資源的應用邏輯。JSP將網頁邏輯與網頁設計的顯示分離,支持可重用的基於組件的設計,使基於Web的應用程序的開發變得迅速和容易。 JSP(JavaServer Pages)是一種動態頁面技術,它的主要目的是將表示邏輯從Servlet中分離出來。 Java Servlet是JSP的技術基礎,而且大型的Web應用程序的開發需要Java Servlet和JSP配合才能完成。JSP具備了Java技術的簡單易用,完全的面向對象,具有平臺無關性且安全可靠,主要面向因特網的所有特點。” JSP技術比php、asp技術產生的更晚,JSP技術現在被用來開發超大型網站,但是並不是因為JSP技術本身非常優秀,而是因為它產生於java之上。 這個時代的asp、php、jsp等動態網頁技術,都有一個共同點,就是你訪問url地址,肯定是存在一個這樣一個文件存在的。asp.net產生的技術基礎是asp,那麽asp.net的webform框架使用這同一思想就順理成章了。webform的頁面文件有兩部分,後綴名是.aspx和.aspx.cs兩部分組成。這個是有別於asp的,asp頁面文件只有一個,後綴名是.asp。從.asp到.aspx我們可以看到,aspx是在asp的後面加了x字母,聯想微軟的其他產品,.docx取代.doc、.xlsx取代.xls,多少可以窺探到微軟對技術升級的命名思考。 以上敘述,講到了asp.net webform將頁面文件拆分成了兩個部分。這是很大的一個改進,這種改進是為了解決一些問題(不是一個,是一系列問題)。改進asp技術cs代碼和html混在一起,暴露代碼細節,asp頁面不會被編譯成dll。同時也有其他優勢。 從asp到asp.net,在webform框架中大量內置了ASP.NET 服務器控件,這是一個很大的改變,這種服務器控件分三種:
  • HTML 服務器控件 - 傳統的 HTML 標簽
  • Web 服務器控件 - 新的 ASP.NET 標簽
  • Validation 服務器控件 - 用於輸入驗證

網上有人說,這是為了解決開發asp頁面會造成意大利面條的問題。我的理解服務器控件的改變遠不止於此,假如你創建一個純服務器控件的頁面(asp.net出現不久,很多人就不建議這麽幹了,至於為什麽,我知道會生成大量viewstate串,當然還有其他原因),然後對頁面元素進行操作,雖然使用的熟練,你可能會意識到webform的頁面文件不是在html字符中間拼東西,或者說不是在一堆服務器無法理解的東東中間,動態的生成一些字符。它前進了很多步,它把頁面的所有html便簽加上標識,經過頁面引擎處理,變成了可以被靈活操作的類,程序開發人員可以隨意操作這些標簽類,然後在一個合適的時候,再將這些類順序的“ToString()”成字符串,拼到頁面上。發明服務器控件技術,作者的思想來源可能是桌面應用程序開發技術,從dos操作系統(命令行交互),到視窗操作系統(主要是鼠標點擊、鍵盤按鍵交互),開發桌面應用程序,會大量使用控件技術,控件復用技術可以大大提升開發效率。為什麽猜測作者的思想可能來源於此,因為asp技術出現時,當時桌面應用程序開發還是主流,作者可能浸染在這種氛圍內,把桌面應用程序開發的設計思想轉移至web程序的開發。這裏要引出另外一個東西,就是事件驅動,隨便新建一個aspx頁面,最重要的是事件處理方法,Page_Load。windows操作系統中大量使用事件驅動,是基於“事件驅動模型”的。那麽作者在webform中使用事件驅動,也可能借鑒了windows。

不管是服務器控件,還是事件驅動,這兩種(或者說是一種,因為控件和事件之間本就相互關聯)設計思想很大的影響了webform框架,開發web應用程序的方式。服務器控件加事件驅動雖然利於很快開發一個管理系統型web程序,但是並不符合web應用程序本身的運行思想,這一點被很多人批評,web程序因為不運行在桌面操作系統中,最早的時候它甚至不能交互,只是為了便於交流信息,只用於展示信息。web程序本質運行原理是,通過瀏覽器向web服務器發送請求處理命令,有web托管程序接收請求命令,進行操作,然後返回處理結果(結果可能是展示一篇文章,或者是告訴你文章刪除成功,或者是將你提價的信息內容進行了保存)。webform容易讓人誤會它運行在操作系統或者瀏覽器中,所有代碼執行在客戶端。雖然現在的瀏覽器真的可以將動態頁面放在瀏覽器端執行,但是webform頁面其實是有服務器端的程序處理的。

如果要評價和審視webform框架的設計思想,不得不對比另外一個框架思想,那就是mvc的框架(模型)的設計思想。mvc模型的發明,或許不是可以設計,而是對事情的深入思考,然後抓住本質的產物。mvc模型是為了處理問題清晰明了,降低耦合性。

由於不會php和jsp就沒辦法對比這兩種技術了,其實很想把它們也拉進來對比下,特別是jsp技術,因為java的跨平臺性,jsp設計時不會有太多windows的影子,windows常常有種不想告訴你復雜的真相,所以我給你包裝一個簡單的世界給你的感覺,然後隨著你的成長,這種早期的包裝可能會是一個大的負擔,或者說微軟的東西有太多windows的影子,過於圍繞windows了。

最後總結一下,如果你放開自己緊張的神經,不給自己設限,隨意聯想,隨意設計,不過去考慮完美,你會感覺到web技術發展一些思想的傳承和變革。從簡單的html純文本展示,文本瀏覽器的發明,背後的http協議0.9,再到圖片展示,LiveScript的發明(就是javascript),到CGI程序,再到Servlet拼接html技術,到php腳本,到asp動態頁面技術,到jsp動態頁面技術,到webfrom框架,spring框架,mvc框架這些技術背後隱隱有一條思想在串聯起來。一個東西的發明不是偶然的,往往有一個不起眼的起始。

閱讀本文請註意,假如你感覺混亂,那麽就不要閱讀引用的部分,可以大概先只閱讀其他內容。 本文並沒有進行認真的考察和檢驗,有的地方可能是錯誤的,一些技術的發明先後也可能並不準確。但是希望文中關註一個技術的發展歷史的思路,能給你學習提供一點助益。

asp.net webform設計思路的思考