asp.net webform設計思路的思考

來源:互聯網
上載者:User

     我使用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(標準通用標記語言 (SGML)下的一個應用)文檔中去執行,執行效率比完全產生HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和最佳化代碼運行,使代碼運行更快。”     php的產生早於asp技術,asp應該是吸收有php技術的建造思想的,之所以稱為建造,是因為php的起點非常低,並沒有被進行充分的設計,它是從一個小工具快速發展起來的。這裡還想提一下另外一個重要的動態網頁技術,再次援引下百度百科:“    “ JSP全名為Java Server Pages,中文名叫java伺服器頁面,其根本是一個簡化的Servlet設計,它 [1]  是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標準。JSP技術有點類似ASP技術,它是在傳統的網頁HTML(標準通用標記語言 (SGML)的子集)檔案(*.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架構這些技術背後隱隱有一條思想在串聯起來。一個東西的發明不是偶然的,往往有一個不起眼的起始。

    

 

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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.