.NET程序設(shè)計(jì)之四書五經(jīng)
Posted on 2006-02-10 16:16 7夜 閱讀(457) 評(píng)論(0) 編輯 收藏 所屬分類: C#抵抗勢(shì)力可見(jiàn),.NET之中最重要的技術(shù)首推 Web Services。大多數(shù)貼著.NET標(biāo)簽的技術(shù)都在某種程度上支持 Web Services。然而.NET絕非僅僅是 Web Services而已,在.NET技術(shù)發(fā)布之初,微軟貼上.NET標(biāo)簽的還包括.NET框架(包括通用語(yǔ)言運(yùn)行時(shí)CLR和.NET框架類庫(kù)兩大部份)、Visual Studio.NET、.NET My Services、.NET企業(yè)服務(wù)器等。
要想透徹理解.NET,就必需透徹理解Web services,同時(shí)還必須領(lǐng)會(huì)以上列舉的每一種.NET技術(shù)的基本要素。很可惜,我個(gè)人期待的Eric Newcomer的著作《Understanding Web Services: XML, WSDL, SOAP, and UDDI》目前在國(guó)內(nèi)還不得見(jiàn)。不過(guò),無(wú)論你打算學(xué)習(xí)Windows Forms,還是ASP.NET(含Web Services),抑或其他.NET技術(shù),我認(rèn)為首先應(yīng)該建立對(duì).NET平臺(tái)的通盤認(rèn)識(shí),然后從CLR開始,自底向上,深入學(xué)習(xí).NET各專項(xiàng)知識(shí)。
直到今天,David Chappell的《Understanding .NET: A Tutorial and Analysis》(《.NET大局觀》,華中科技大學(xué)出版社)仍然是一本不錯(cuò)的.NET大局觀讀物。David善于將復(fù)雜的技術(shù)用簡(jiǎn)單而清晰的方式表達(dá)出來(lái)。尤其值得一提的是,這本書對(duì)于Web Services的清晰介紹,在別的書里很難看到。然而,有感于一些讀者的誤解,作為譯者之一,在此我想重提侯捷先生的一句話:“讀者基礎(chǔ)”從來(lái)都是一個(gè)說(shuō)不清楚、難以量化的東西。不妨試讀一二,如果滿意,它就適合你。
我時(shí)常光顧的一家書店的.NET圖書總量,在很短的時(shí)間內(nèi)就趕上了Java圖書總量。林林總總,內(nèi)容遍及各個(gè)領(lǐng)域,包括微軟中間語(yǔ)言(Intermediate Language,IL)、CLR、.NET框架類庫(kù)、.NET語(yǔ)言、Visual Studio .NET,以及像COM互操作、多線程這樣的高級(jí)主題。限于篇幅,本文重點(diǎn)推介三本好書,不過(guò),僅此三本已經(jīng)涵蓋了.NET平臺(tái)的大半江山。
CLR、Windows Forms和ASP.NET
Jeffrey Richter, Applied Microsoft .NET Framework Programming
《Microsoft .NET框架程序設(shè)計(jì)(英文版)》,機(jī)械工業(yè)出版社
《Microsoft .NET框架程序設(shè)計(jì)(修訂版)》,清華大學(xué)出版社
.NET框架主要包含兩大塊:其一是CLR,其二是類庫(kù),而CLR則是.NET框架中其他任何東西的基礎(chǔ)。無(wú)論是要透徹理解像C#、Visual Basic.NET這樣的.NET語(yǔ)言,還是要全面把握ASP.NET、ADO.NET和Windows Forms這樣的.NET框架類庫(kù),你都必須對(duì)CLR有一個(gè)很好的理解。Richter的這本書就是CLR方面的權(quán)威著作,它詳細(xì)地講解了CLR的構(gòu)造和工作機(jī)理,而.NET框架類庫(kù)并非本書的重點(diǎn)。
Richter是Win32程序設(shè)計(jì)領(lǐng)域的權(quán)威技術(shù)作家,本書則奠定了他在.NET世界同樣的地位。這本書對(duì)于程序集、裝箱/拆箱、事件和委托、異常機(jī)制以及垃圾收集等關(guān)鍵主題的講解準(zhǔn)確而清晰,同時(shí)還給出了許多寶貴的建議和忠告。因此,盡管Visual Studio .NET這樣的集成開發(fā)環(huán)境很容易上手,但為了有效地構(gòu)建各類高效的應(yīng)用程序,我推薦你在動(dòng)手編寫代碼之前,認(rèn)真閱讀一下這本書。
這本書對(duì)于完全的初學(xué)者有一定的難度,而對(duì)于有經(jīng)驗(yàn)的程序員(包括Windows DNA程序員和Java程序員)來(lái)說(shuō),這本書正是他們夢(mèng)寐以求的.NET讀物。
順帶一提,這本書的中譯本先后出過(guò)兩個(gè)版本。“修訂版”的譯者李建忠先生是我的朋友。因我虛長(zhǎng)建忠?guī)讱q,在他決定接受此書修訂邀請(qǐng)之前曾征求我的意見(jiàn) — 很幸運(yùn) — 他沒(méi)有理會(huì)我的建議,各位讀者朋友今天才得以看到這個(gè)傾注著譯者心血的譯本。
Charles Petzold, Programming Windows with C# (Core Reference)
《Programming Windows with C# (Core Reference)(影印版)》,世界圖書出版公司
《Microsoft C# Windows 程序設(shè)計(jì)》(上、下冊(cè)),北京大學(xué)出版社
這部著作的問(wèn)世,證明Petzold 依然是Windows GUI程序設(shè)計(jì)領(lǐng)域的首席作家。本書專注于使用Windows Forms類庫(kù)和C#語(yǔ)言編寫傳統(tǒng)的Windows桌面應(yīng)用程序。是的,本書沒(méi)有涉及CLR、ADO.NET以及ASP.NET等“更重要的”.NET技術(shù)。除了對(duì)C#語(yǔ)言浮光掠影的簡(jiǎn)介外,它沒(méi)有越雷池半步,全神貫注于Windows Forms程序設(shè)計(jì),深入解釋了Windows Forms類庫(kù)的方方面面。
盡管Visual Studio .NET提供了大量的可視化工具和向?qū)В刮覀兊靡钥焖俚卦O(shè)計(jì)用戶界面并享用其生成的代碼框架,但Petzold 沒(méi)有讓Visual C# .NET自動(dòng)生成代碼,本書所有代碼都是手工編寫而成 — 這也是Petzold一貫的風(fēng)格。不妨首先按照Petzold的方式,學(xué)會(huì)怎樣編寫你自己的代碼,在理解了足夠多的Windows Forms知識(shí)的基礎(chǔ)上,再使用IDE來(lái)縮短你的項(xiàng)目開發(fā)周期。
淵博的領(lǐng)域知識(shí),高超的寫作技巧,清晰的寫作風(fēng)格,使得本書如此之厚,而又如此簡(jiǎn)潔、清晰。閱讀本書,宛若和Windows程序設(shè)計(jì)大師面對(duì)面地交流,許多疑惑,豁然開朗。
在Windows Forms程序設(shè)計(jì)領(lǐng)域,我還要特別提一下Chris Sells的著作《Windows Forms Programming in C#》,原因倒不僅僅在于我是這本書中文版的領(lǐng)銜譯者。
我們知道,GUI應(yīng)用程序開發(fā)方面的參考書往往會(huì)走向兩個(gè)極端。一種是充斥著IDE截屏圖的開發(fā)工具“快速入門”,我想各位讀者對(duì)這種書不應(yīng)該陌生。而上面提到的Petzold的著作則走向“另一個(gè)極端” — 它只字不提IDE提供的可視化的交互設(shè)計(jì)特性。我不否認(rèn)Petzold的方式對(duì)于學(xué)習(xí)者來(lái)說(shuō)行之有效 — 我本人就是Petzold著作的受益者。然而,你知道,作為一名開發(fā)實(shí)際.NET應(yīng)用的程序員,我們幾乎總是工作于像Visual C# .NET這樣的IDE中,因此,我們必須能夠游刃有余地運(yùn)用IDE提供的各項(xiàng)功能,同時(shí)還必須洞悉IDE背后隱藏的Windows Forms及與之緊密相關(guān)的知識(shí)。Sells 的這本書能夠讓你心想事成。請(qǐng)耐心等候,好戲還在后頭。
Jeff Prosise, Programming Microsoft .NET
《Microsoft .NET程序設(shè)計(jì)技術(shù)內(nèi)幕》,清華大學(xué)出版社
和前面兩本書一樣,這也是一本“文不對(duì)題”的著作,中文版的書名則更加離譜。盡管這本書在內(nèi)容上劃分為三大塊,對(duì)于Windows Forms等技術(shù)主題也花了一定的篇幅,但本書的出發(fā)點(diǎn)顯然在于ASP.NET應(yīng)用程序開發(fā),它的大部分篇幅要么是講述Web應(yīng)用開發(fā)和Web Services技術(shù),要么是講述與此兩者密切相關(guān)的東西。
這并不奇怪。盡管.NET平臺(tái)包含許多東西,但首先同時(shí)也是最重要的是,它的出發(fā)點(diǎn)是為了提供一種更好的編寫以Internet為中心的應(yīng)用的方式(請(qǐng)不妨再回顧一下.NET的定義)。可以說(shuō),Prosise準(zhǔn)確地把握、解釋和示范了.NET平臺(tái)最主要的一大塊內(nèi)容。
鑒于傳統(tǒng)的ASP技術(shù)是如此流行,ASP.NET對(duì)開發(fā)人員的影響肯定要比 .NET框架類庫(kù)的其他任何部份都要大。客觀地說(shuō),在.NET世界,ASP.NET的地位要比Windows Forms的地位來(lái)得重要。
順帶一提,Prosise的著作一向是一線程序員的鐘愛(ài)。在程序員面前,他的作品沒(méi)有什么架子,你可以一邊翻著他的書,一邊寫程序。
.NET語(yǔ)言
CLR為.NET語(yǔ)言定義了一套通用的語(yǔ)義,而不同的.NET語(yǔ)言則以不同的語(yǔ)法表達(dá)了這一語(yǔ)義。在.NET平臺(tái)中,語(yǔ)言已經(jīng)退居次席。和大多數(shù).NET程序員一樣,我選擇的.NET語(yǔ)言是C#。
如果你安裝了VS.NET 2002或VS.NET 2003中文版,請(qǐng)到VS.NET的安裝目錄下搜索一個(gè)名為“C# Language Specification.doc”的文檔。其作者是Scott Wiltamuth 和 Anders Hejlsberg。區(qū)別在于,VS.NET 2002攜帶的是英文版,而VS.NET 2003攜帶的則是中文版。你也可以訪問(wèn)MSDN主頁(yè)(文后給出了具體鏈接)。這兒除了有“C# Language Specification”外,還有“C# Programmer's Reference”這樣的非常有用的參考手冊(cè)。
此外,如果你是一名完全的C#初學(xué)者,不妨留心一下Petzold的《Programming in the Key of C#: A Primer for Aspiring Programmers》。這是Petzold專為C#初學(xué)者編寫的一本小書。我相信這本書早晚有一天會(huì)出中文版。本著Petzold的一貫水準(zhǔn),它不應(yīng)該讓你失望。
結(jié)語(yǔ)
微軟起初為許多玩意兒貼上了.NET標(biāo)簽,盡管當(dāng)時(shí)其中一些既未使用.NET框架,也不直接支持.NET框架。這也導(dǎo)致了巨大的混亂和混淆,同時(shí)也為.NET招致了更多的非議和批評(píng)。我們應(yīng)該還有印象,在.NET戰(zhàn)略發(fā)布之后的很長(zhǎng)時(shí)間內(nèi),仍然有許多人迷惑不解:到底什么是.NET?或者說(shuō),.NET到底是什么?
今天,多少有點(diǎn)諷刺意味的是,就在一些產(chǎn)品真的支持.NET技術(shù)之際,它們反而丟掉了.NET標(biāo)簽。比方說(shuō),內(nèi)置了.NET框架的“Windows .NET Server”在發(fā)布前夕被重命名為Windows Server 2003。.NET企業(yè)服務(wù)器亦在陸續(xù)支持.NET框架、成為貨真價(jià)實(shí)的“.NET企業(yè)服務(wù)器”的同時(shí),而被撕掉.NET標(biāo)簽。而所謂的“Office .NET”終究只是一個(gè)謠傳,但Office 2003的確提供了對(duì).NET實(shí)實(shí)在在的支持。比方說(shuō),Word 2003 文檔和模板以及 Excel 2003 工作簿都可以運(yùn)行所引用的 .NET 程序集中的代碼,而這些 .NET 程序集代碼的安全性則是由.NET框架而非Word或Excel進(jìn)行管理的。
但是,有兩樣?xùn)|西的.NET標(biāo)簽貼得一直非常牢靠:一是.NET框架,二是Visual Studio .NET。我們可以感覺(jué)到,目前.NET標(biāo)簽基本上局限于使用在“技術(shù)范圍”之內(nèi),這與其說(shuō)是微軟的妥協(xié)退步,倒不如說(shuō)是一種理智的進(jìn)步。“高科技”企業(yè)向來(lái)有拿技術(shù)名詞糊弄外行的惡習(xí),這也是市場(chǎng)營(yíng)銷人員的慣用伎倆(比如新模范馬路上的手機(jī)廣告可以是“內(nèi)置Java技術(shù)……”)。也許微軟意識(shí)到了誠(chéng)實(shí)一點(diǎn)于人于己都有好處。
.NET標(biāo)簽的縮水并不意味著微軟.NET技術(shù)戰(zhàn)略發(fā)生了根本性的動(dòng)搖。盡管像.NET My Services這樣的技術(shù)沒(méi)有像微軟預(yù)想的那樣成功,但.NET平臺(tái)的核心技術(shù)卻一直穩(wěn)步向前發(fā)展,并業(yè)已取得無(wú)可辯駁的成功。回頭看看一兩年前包圍著.NET的許多誣蔑和毀謗,如今早已不攻自破,事實(shí)再次證明微軟將續(xù)寫不敗的神話。無(wú)論如何,和您一樣,我希望.NET和它的競(jìng)爭(zhēng)對(duì)手能夠共同擁有美好的明天。