asp.net webform設計思路的思考
我使用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得到迅速流行。
- 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設計思路的思考