庖丁解牛:縱向切入Asp.net 3.5控制項和組件開發技術—讀者序

來源:互聯網
上載者:User

本書主要內容 

大部分開發人員在學習Asp.net的過程中都有這樣的體會,使用Asp.net開發很多年,但仍然感覺對Asp.net技術的瞭解比較少,對知識點的瞭解比較模糊;以及,在工作過程中經常接到苛刻的控功能需求,我們經常以“控制項不支援的理由”迴避需求人員,僥倖逃過一劫。但這並不是長久之計,要想對Asp.net技術有質的提高, 必須首先要理解其工作原理, 瞭解頁面、控制項的工作原理及呈現過程。 

本書主要介紹ASP.NET的控制項開發,書中通過70多個例子講解ASP.NET控制項開發技術的各個方面,而且剖析了很多控制項系統基類原始碼,並且從這些系統原始碼可以體會設計模式思想。如果紮實地掌握了ASP.NET控制項的運行機制,開發一個頁面級的ASP.NET應用程式會變得非常簡單。本書宗旨就是讓開發人員真正理解ASP.NET技術,協助開發人員提高ASP.NET開發的技術水平。學完本書後您不僅能夠掌握控制項開發各個方面的技術, 而且深曉ASP.NET的工作原理。對大部分使用Asp.net技術開發兩年左右的開發人員來說,本書內容中有75%以上的內容可能沒有接觸到,本書將通過作者精心準備的一些形象的例子來闡述這些內容。如果您想瞭解本書的更多內容,請查看下面網址:http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx 

本書通過講解Asp.net控制項技術提高開發人員的Asp.net技術。適合從事Asp.net技術多年想往深度理解Asp.net工作機制的工作人員;基於考慮到對Asp.net剛剛入門的初級開發人員,我在前面幾章也介紹了幾個協助初始人員入門的應用例子;微軟公司的Asp.net技術已經經過了三個版本的大演變,已經變為比較成熟的技術,目前在軟體公司專屬應用程式中也廣泛被採納,本書也可以作為在校學生的就業預備教材,本書可以讓您理解最流行的基於Web架構的應用程式呈現過程。另外,針對讀者安裝的開發環境不同,我分別為VS 2005和VS 2008建立了兩個解決方案,即無論您是在VS 2005下開發還是VS 2008下開發都可以成功開啟本書隨書光碟片的代碼,只是使用VS 2005開啟的解決方案不包含.NET 3.5對應章節內容的範例程式碼。 

作 者 序 

很多開發人員都有這樣的體會,使用ASP.NET開發很多年,但覺得水平總是提高不了,甚至我發現有超過五年工作經驗的資深開發人員對ASP.NET技術掌握得也不是很深。其主要原因是在開發過程中只注重往廣度(橫向)去學習各種技術,包括各種最新技術,而沒有在掌握一個技術後往深度(縱向)研究。還有很多開發人員雖然具有多年工作經驗,但只是使用ASP.NET技術開發頁面級的應用程式(頁開發人員),而沒有或沒有機會接觸到ASP.NET的底層技術,比如Web應用程式的頁面呈現過程等,這些技術並不僅限於ASP.NET,而是在基於Web平台的B/S架構下必須掌握的東西。

比如一頭牛,看上去似乎渾身都是肉,但如果我們拿著刀去宰一頭牛,才知道沒那麼容易,僅用刀無規律地硬砍不但會費很大的力氣,而且很可能會最終把牛砍得一片狼藉,因為對牛的身體組織圖不熟悉而無法正確地入刀;而《莊子·養生主》中為文惠君宰牛的廚師則不然,其刀入牛身若“無厚入有間”而遊刃有餘,因為他對牛的結構了如指掌,這就是所謂的深度(縱向深入研究)。

學習ASP.NET技術也是這樣,如果在工作中只是對技術淺嘗輒止,則很難提高自身的技術水平,本書主旨正是用“庖丁解牛”之術解析ASP.NET,從深度講解ASP.NET的工作機制。

運行環境介紹
本書所述的開發環境主要以微軟最新架構.NET Framework 3.5為基礎,整合VS 2008開發環境進行講解,本書隨書光碟片所有樣本均在IE 7.0瀏覽器全部驗證通過。

.NET Framework 3.5完全相容之前的版本,也就是說.NET Framework 3.5之前版本的控制項類庫是.NET Framework 3.5的子集,基於此在隨書光碟片中我專門用VS 2005開發環境做了一套樣本(只是缺少.NTE 3.5新功能特性,如Ajax控制項)。這樣可以讓使用VS 2005或VS 2008的朋友都能夠開啟隨書光碟片中的控制項工程。在書中的許多技術點都以VS 2005和VS 2008這兩個開發環境進行對比分析。

本書主旨及特色
準確地講,ASP.NET是一種技術而不是一種語言,掌握一門技術的前提是要理解其工作原理。相對來說,學習ASP.NET技術要比學習一門語言要難許多。

而本書的宗旨就是讓開發人員真正地理解ASP.NET技術,協助開發人員提高ASP.NET開發技術。書中內容主要以控制項開發為主,如果紮實地掌握ASP.NET控制項的運行機制,則開發一個頁面級的ASP.NET應用程式會變得非常簡單,學完本書後您不僅能夠掌握控制項開發各個方面的技術,而且能夠透徹理解ASP.NET的工作原理。

本書不是講解怎麼使用ASP.NET控制項,而是實實在在地講解怎麼開發控制項。在講解控制項開發的過程中剖析了很多控制項系統基類原始碼,多接觸些.NET Framework的原始碼對設計模式思想的理解也會更深刻,相對於書中的理論這就是實踐。控制項開發與設計模式有何相干?

設計模式淺淡:在繼承系統基類開發自訂控制項的過程中,細心的開發人員可能會發現基本上系統的所有的基類都有一個最基本的設計模式 — 模板方法模式,這個設計模式的特點是:由基類定義骨架,由基類驅動(比如控制項的生命週期各個階段方法的執行就是由基類驅動的),由基類提供最普遍的預設實現,由基類抽取出不變代碼實現代碼重用。這樣的好處是,在大多數情況下,我們在開發自己的自訂控制項時,寫很少的代碼(或者什麼都不寫)就可以實現一個控制項,舉個例子請看一下如下代碼: 

Public KingTextBox : TextBox

{} 

以上代碼中沒有寫一句實現代碼,但它仍然是一個完整的控制項,重用了基類中的所有功能,當我們需要的功能與基類的功能不同時,僅需要重寫(override)基類個別方法,即可實現必要的功能,其餘功能的仍然使用基類的預設實現,這裡要說明的是實現自訂控制項類不像實現我們自己的業務類一樣要把類中的每個方法都要親自編碼實現。此外,在控制項開發技術中,使用這種設計模式可以把繁瑣的事情由系統基類來統一完成,在一定程可以避免開發人員出錯的可能性。

設計模式是物件導向的公式,我個人也看過不少設計模式方面的書,也對設計模式比較感興趣。個人覺得學習設計模式最好的辦法是先找幾本書看一遍,吃透,再看大量的原始碼,經常會有頓悟的感覺;否則可能看懂了一段精典設計模式的代碼,也不知道是什麼設計模式,只是把代碼讀懂了。在控制項開發中,如果你想瞭解得更多,必須要看.NET Framework中的系統控制項代碼,在不知不覺中就會提高自己的開發能力和物件導向思想。

本書內容主旨不是講設計模式,這裡就談這麼多,如果想瞭解更多物件導向的話,我仍然要提醒的是在看系統原始碼時不要局限於僅看懂代碼,還要看一下系統基類之前的關係,想一下它們的類為什麼要這麼設計。 

書中有些重要的知識點一般開發人員可能永遠不會在工作中用到,但這些知識可以讓您對ASP.NET技術理解得更透徹、更深刻。

此外,控制項開發工作的好處是有更多機會實戰物件導向,比如控制項中的介面非常多,一個好的控制項不僅在於功能強大,效能好,也在於是否易重用,是否易擴充,是否能用盡量少的代碼實現所需的功能。

看完本書,您將能夠理解ASP.NET頁面以及其中每個元素的產生過程。ASP.NET開發實質上就是應用控制項的過程,我們在頁面中使用的每個控制項,甚至頁面都是一個派生自System.Web.UI.Page控制項的類,只是Page控制項是一個特殊的容器控制項,而它的組建循環與一般控制項組建循環是一樣的,在書中也有一些講解Page控制項運行機制的知識點。當知道了控制項的工作原理,再來開發一個頁面則會非常容易,也可以說學習控制項開發是加速掌握ASP.NET技術的有效途徑。

本書注重理論實踐結合,針對每個ASP.NET控制項開發技術知識點,基本上都會有對應的樣本應用。

在章節分類方面,按照技術點類別進行分類,內容比較全面,對每個控制項開發技術點,都進行了詳盡的闡述,本書也可以作為尋找手冊使用。

是什麼原因讓我有寫這本書的意願
開始我僅僅是把控制項開發經驗寫在部落格上,後來發現這樣寫在Blog上比較瑣碎,最大的缺點是不能保證知識點前後連貫性,也不能系統地有始到終全面地講解完整一種技術。慢慢地隨著開發經驗的增多,漸漸就有了寫這本書的打算,乃至本書最終出版。

本書可以協助讀者提高ASP.NET開發技能,對我來說也是對近幾年工作一個系統的總結,在寫書的過程中自己能力也提高了許多。

ASP.NET技術可以說是技術的一次偉大變革,但也為開發人員帶來一些隱患,因為它使程式員變得“比較傻”,Web伺服器技術是一個比較複雜的技術,程式員如果一開始從事開發就遇到ASP.NET,就會認為開發Web程式像C/S架構那麼簡單,導致程式員不僅不瞭解用戶端技術,而且由於ASP.NET的易用性(為了實現易用性而把一些Web技術封閉到底層)使程式員對伺服器端技術也不甚瞭解。我對這個是比較憤慨的,這也是寫這本書的另一個重要原因。我發現好多開發人員對ASP.NET技術的理解甚微,與我一起工作的甚至有多年開發經驗的朋友對一些ASP.NET基本性的原理還不瞭解,也可以說終究是因為ASP.NET技術的出現以及開發環境的整合性讓很多開發人員變成“傻瓜式”的編程,使開發人員沒有機會去瞭解那些東西。

以ASP.NET為例,舉幾個開發人員常犯的基礎性認識錯誤:

Ø 分不清楚控制項的服務端和用戶端ID

頁面中有一個ID為TextBox1的服務端控制項,很多開發人員在用戶端訪問該控制項的DOM元素時,用如下語句:

var txtbox = document.getElementByID("TextBox1");

之後有一天,他突然發現代碼出問題了,通過以上代碼再不能夠檢索到TextBox1控制項的用戶端元素了。對服務端控制項來說這種寫法是錯誤的,正確寫法是:

var txtbox = document.getElementById('<%= TextBox1.ClientID %>');

出錯原因是他們沒有理解服務端控制項不像用戶端控制項只有一個ID。服務端控制項有三個屬性標誌控制項的唯一名稱,這三個屬性是:ID,UniqueID和ClientID。其中ID表示我們給它命名的ID,不管在服務端還是用戶端程式中都不會使用這個ID;UniqueID表示控制項的服務端ID,在服務端標誌控制項的唯一名稱;ClientID表示控制項的用戶端ID,在用戶端標記頁面中元素唯一名稱。從使用角度講,如果繼承了INamingContainer介面,當我們為子控制項設定一個ID後,它的UniqueID和ClientID會自動加上父控制項名稱和分隔字元作為首碼。一般來說,在服務端分隔字元預設使用“$”進行分隔(UniqueID),但是到了用戶端會自動將這些“$”轉換為下畫線“_”(ClientID),即用戶端ID和服務端ID名稱是一樣的,只是分隔字元不同。

上面代碼出錯的原因是某天他把TextBox1控制項放到了主版頁面容器控制項中。在增加主版頁面之前,TextBox1控制項由於沒有父容器,所以它的ID,UniqueID以及ClientID都是“TextBox1”,只是巧合;一旦TextBox1放到了容器控制項中,它的UniqueID和ClientID都會發生改變,要增加父容器的名稱作為首碼,比如它的ClientID可能變為Panel1_TextBox1,服務端UniqueID變為Panel1$TextBox1。這裡限於篇幅不再深入闡述,本書中會有詳解。

Ø 濫用ASP.NET提供的系統級對象

由於一些開發人員對ViewState(還包括Cache,Session等)機制的不瞭解,而導致其在開發過程中濫用。比如誤認為ViewState是儲存在用戶端(表面看是在頁面中)而不是服務端,而把ViewState當做一個海量容器來用,甚至把頁面上的業務列表資料都緩衝到ViewState中,最終導致頁面流量龐大,開啟頁面速度非常慢卻找不到原因。

學習一種技術與學習一種語言是有區別的。首先要瞭解ASP.NET各個對象的機制,簡單地說ViewState的工作流程是這樣的:每次提交時,它都會以用戶端到服務端的形式來回傳遞一次,當處理完成後,最後會以處理後的新結果作為新的ViewState儲存到頁面中的隱藏欄位,並與頁面內容一起返回到用戶端。

上面導致頁面非常慢的原因是,開發人員不瞭解ASP.NET的頁面呈現過程,誤把業務級資料的序列化字串儲存到頁面上的隱藏控制項中,從而導致頁面位元組數變得龐大,使傳輸速度成為瓶頸。ViewState最喜歡儲存資料量少的鍵/值串。有關頁面狀態(檢視狀態和控制項狀態)的儲存在第6章有專門講解。

還有朋友問我,在頁面提交時要在伺服器上運行一段JavaScript代碼,而不是在用戶端運行,應該怎麼做?或者有的朋友問,在兩個服務端程式碼片段中間執行一段JavaScript指令碼該怎麼做?

出現這些問題的最根本原因是開發人員對ASP.NET技術運行機制沒有瞭解清楚ASP.NET服務端控制項生命週期,不知道用戶端指令碼是必須在服務端執行完成後才在用戶端執行的。

使用物件導向思想構建軟體可以帶來很多好處,比如封裝性、擴充性,等等,好處多多,這裡就不一一列舉。這裡我要說的是物件導向給開發人員帶來的隱患。很多開發人員進行物件導向開發時,都是在不瞭解基類的前提下進行派生並開發的,如果使用物件導向技術,不瞭解基類真的是非常危險的事情。這裡的基類指的是系統基類、三方組件基類或自己開發的基類,其中系統基類是最應該瞭解,也是最容易忽略的。

比如我們在衍生類別中經常會使用一些類似base.方法名(參數)語句格式的方法,尤其是在控制項開發過程中,基本上都是派生自系統控制項基類開發自己控制項的。比如一個簡單的base.Render(e)方法的使用,我在開發過程中就遇到這麼多應用情境:有時候不調用該語句;有時候必須調用;有時候需要調用它但要屏蔽基類base.Render(e)方法體中的一些功能或修改部分功能;有時候不調用但要執行base.Render(e)方法中的部分代碼語句,等等。要實現這麼多情境功能,前提是必須要對base.Render(e)方法瞭解,更確切地說應該是對整個基類瞭解。也有許多開發人員在不知道基類中方法的功能時,通過例子去猜測性的嘗試,根據調用的結果來瞭解它的功能,但在很多時候這種方式得出的結論是不準確的。最好的辦法是徹底地看一下基類的原始碼。

基於此,本書的另一大特色就是在講解每一種控制項開發類型時,都會先把系統提供的可繼承控制項基成員(基類或基底介面)作詳細解析。這樣不但可以讓開發人員開發時能夠感覺得心應手,更重要的是能夠協助他們開發出更準確更精確的控制項。

我 的 承 諾
如果您之前沒有從ASP.NET控制項研究過ASP.NET開發,看了這本書您對ASP.NET技術的理解會提高三倍,對於已從事開發一兩年的開發人員,對於本書75%以上的內容可能還沒有接觸到。本書就像“庖丁解牛”一樣剖析ASP.NET,當然前提是您要有耐心把本書讀完。由於本書介紹的是一些ASP.NET進階編程技術,可能有些技術初學者理解起來比較困難,遇到這種情況千萬不要泄氣,只要堅持把書看完就會做到前後技術連貫起來。

另外,書中講到的每個例子都在隨書光碟片中對應章節可以找到,每看完一個例子要運行一次實際的例子,這些例子不僅僅是樣本一下每個控制項開發技術,更重要的是它提供了一些控制項開發解決方案經驗。

本書適合讀者對象
本書通過講解ASP.NET控制項技術來協助開發人員提高自身ASP.NET開發水平,適合從事ASP.NET技術開發多年,希望深度理解ASP.NET工作機制的工作人員,考慮到對ASP.NET剛剛入門的初級開發人員,在本書前幾章也介紹了幾個協助初級人員入門的應用例子。微軟公司的ASP.NET技術已經經過了三個版本的大演變,變為比較成熟的技術,目前在軟體公司專屬應用程式中也廣泛被採納,本書也可以作為在校學生的就業預備教材。

不是我自己在奮鬥
首先我要感謝開心大哥和林思綺為本書作的推薦序,以及各位專家(杜勇,朱曄,王濤,李會軍,高陽,孟憲會,蘇鵬,張博,葉帆,李洪根)如一針見血的書評,有了你們的書評,本書猶如如虎添翼。

其次,對提供技術分享的博友們表示感謝,哪怕是我們並不認識,但你們對知識一絲不掛的分享是我知識進步的源泉。特別要感謝以杜勇先生為首的網上家園-部落格園,可甚稱技術專家基地,不管是我在寫作過程中還是在工作中,你們總是能供在我遇到困難時及時的提供解決方案。

在工作中,每天與我最親密的就是我的如兄弟姐妹般的同事們,多謝你們對我技術的指導以及對我生活中的關懷,多謝!

對本書的各位編輯李冰、許豔、李玲以及電子工業出版社所有相關工作人員,表示由衷的感謝,本書的出版離不開你們的指導和你們辛勤的工作,尤其是在本書寫作的過程中,李冰始終的耐心支援與鼓勵,以及許豔對書稿審批的細心一絲不漏,還有李玲對本書外觀的設計極富創意,再次對你們三位表示特別感謝。

我還要感謝家長控制。父母生我養我,您們的恩情我即使是銜草結環也難以回報,您們對我無微不至的關心與照顧,使得我能夠心無旁騖,專心寫作。感謝我新婚的妻子趙敬對我寫作本書期間的全力支援,在我忙碌寫書的時候,總是忽略了你默默在我身邊,即使是在陽光明媚的秋日,我也無法陪伴你去南山郊遊,但你沒有絲毫怨言,沒有你的理解和鼓勵,就不可能有本書的出版。家人的關懷始終是這麼溫暖,我希望能將本書獻給我親愛的家人。

最後,感謝具有非凡人般毅力、又有堅強的性格,能夠為追求自己的理想而努力拚搏、永不放棄的我。我的座右銘:對一件覺得有意義的事情,要設法用最快的時間完成它。

 

現在閱讀本書內容: http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx噹噹網書店讀者評論: http://productp.dangdang.com/product.aspx?product_id=20540701

         附: 線上購買本書: 
             【噹噹網購買】
             【china-pub購買】
             【卓越亞馬遜購買】

                                                                  鄭健                                                                  2009年1月1日

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.