.NET架構(gòu)的核心開(kāi)發(fā)技術(shù)
發(fā)布時(shí)間:2008-08-07 閱讀數(shù): 次 來(lái)源:網(wǎng)樂(lè)原科技
(作者:金志立、中國(guó)軟件網(wǎng))
不可否認(rèn),應(yīng)用軟件的開(kāi)發(fā)正在經(jīng)歷一次巨變——將最終增強(qiáng)開(kāi)發(fā)人員的生產(chǎn)力并開(kāi)啟一道通向全新概念的應(yīng)用程序的大門。
新型的開(kāi)發(fā)模式正逐漸被推廣,將分發(fā)軟件演變成一種服務(wù)還有待于所有開(kāi)發(fā)人員的共同努力,而互聯(lián)網(wǎng)卻將徹底改變應(yīng)用程序的開(kāi)發(fā)模式和配置方式。
傳統(tǒng)上,軟件開(kāi)發(fā)人員通過(guò)集成本地系統(tǒng)服務(wù)的方式開(kāi)發(fā)應(yīng)用程序。這種模型使開(kāi)發(fā)人員有權(quán)使用一整套豐富的開(kāi)發(fā)資源,精確控制應(yīng)用程序的性能。
如今,開(kāi)發(fā)人員在很大程度上已掙脫了這種模式的束縛,致力于構(gòu)建具有復(fù)雜結(jié)構(gòu)的n層系統(tǒng),這種系統(tǒng)能將網(wǎng)絡(luò)中各處的眾多的應(yīng)用程序進(jìn)行集成,并大大提升應(yīng)用程序的價(jià)值。這樣,開(kāi)發(fā)人員便可集中精力挖掘軟件獨(dú)特的商業(yè)價(jià)值,而不必日夜為如何構(gòu)建基本結(jié)構(gòu)傷腦筋了。令人欣喜的局面將應(yīng)運(yùn)而生:軟件投放市場(chǎng)的時(shí)間大大縮短、開(kāi)發(fā)人員的編程效率明顯提高,最為根本的是開(kāi)發(fā)出質(zhì)量上乘的軟件。
我們正在進(jìn)入計(jì)算機(jī)發(fā)展的下一個(gè)階段——基于Internet的階段,特別是基于Internet核心技術(shù)——XML擴(kuò)充標(biāo)記語(yǔ)言。盡管多層應(yīng)用程序開(kāi)發(fā)將焦點(diǎn)集中在建造大型企業(yè)級(jí)應(yīng)用程序上,但現(xiàn)在XML使得能夠創(chuàng)建可用于任何人、任何場(chǎng)所的大型應(yīng)用程序。它擴(kuò)大了應(yīng)用程序的使用范圍。這樣,軟件就不是只能從CD上安裝的某種東西,而是一種服務(wù)——就像呼叫服務(wù)或者計(jì)費(fèi)電視一樣,可以通過(guò)通信媒體來(lái)預(yù)訂。
這一切,是通過(guò)將緊密聯(lián)接的、高效的n層計(jì)算技術(shù)與面向消息的、松散聯(lián)接的Web概念相結(jié)合來(lái)實(shí)現(xiàn)的。我們將這種計(jì)算風(fēng)格稱為Web Service(Web服務(wù)),它的出現(xiàn)標(biāo)志著人類已經(jīng)邁入應(yīng)用程序開(kāi)發(fā)技術(shù)的新紀(jì)元。Web服務(wù)是一種應(yīng)用程序,它可以使用標(biāo)準(zhǔn)的互聯(lián)網(wǎng)協(xié)議,像超文本傳輸協(xié)議(HTTP)和XML,將功能綱領(lǐng)性地體現(xiàn)在互聯(lián)網(wǎng)和企業(yè)內(nèi)部網(wǎng)上。
我們也可將Web服務(wù)視作Web上的組件編程。
從理論上講,開(kāi)發(fā)人員通過(guò)調(diào)用Web應(yīng)用編程接口(API),將Web服務(wù)集成進(jìn)他們的應(yīng)用程序,就像調(diào)用本地服務(wù)一樣。兩者區(qū)別在于前者能夠通過(guò)Internet發(fā)送到某個(gè)遠(yuǎn)程系統(tǒng)的服務(wù)上。例如,像微軟護(hù)照(Microsoft Passport)這樣的服務(wù),可以給開(kāi)發(fā)人員提供應(yīng)用程序身份確認(rèn)的功能。通過(guò)對(duì)護(hù)照服務(wù)編程,開(kāi)發(fā)人員就可以利用護(hù)照服務(wù)的基礎(chǔ)體系,實(shí)現(xiàn)維護(hù)用戶數(shù)據(jù)庫(kù),確信服務(wù)開(kāi)啟和運(yùn)行以及正確地備份等等功能。
■松散聯(lián)接
跨越網(wǎng)絡(luò)的分布應(yīng)用程序邏輯的概念并不是一個(gè)新名詞,但跨越Web的分布和集成應(yīng)用程序邏輯的概念卻是。
此前,像微軟的DCOM (Distributed Component Object Model )、Object Management Group公司的CORBA (Common Object Request Broker Architecture )以及Sun公司的RMI(Remote Method Invocation )這些分布式對(duì)象模型被稱為分布應(yīng)用程序邏輯。運(yùn)用這些系統(tǒng)結(jié)構(gòu),雖然服務(wù)放在遠(yuǎn)程系統(tǒng)上,開(kāi)發(fā)人員仍然可以像原來(lái)本機(jī)編程那樣維護(hù)和豐富應(yīng)用程序的功能。
但這種系統(tǒng)的問(wèn)題是不能擴(kuò)展到Internet。因?yàn)樵擉w系的基礎(chǔ)是服務(wù)器上的客戶端和服務(wù)器的緊密聯(lián)結(jié)。這意味著兩者必須是同質(zhì)的基礎(chǔ)體系,但也就常常意味著這種系統(tǒng)是非常脆弱的,如果有任何一端接口發(fā)生變化,另一端程序必然就會(huì)被中斷。舉個(gè)例子,如果服務(wù)器應(yīng)用程序的接口改變了,那么客戶端也將會(huì)失效。
開(kāi)發(fā)中要求有一個(gè)緊密聯(lián)接的系統(tǒng)這本身沒(méi)有錯(cuò),而且許多應(yīng)用程序也一直就是建立在這些系統(tǒng)上的。但最終,隨著時(shí)間的流逝,這種模型是不會(huì)擴(kuò)展的。因?yàn)楸姸喙酒髽I(yè)要求相互溝通,這很難保證會(huì)有一個(gè)統(tǒng)一的系統(tǒng),同樣也很難保證,你的客戶的服務(wù)器會(huì)有你所需要的完全一致的系統(tǒng),你甚至都不可能猜想到它所用的是什么操作系統(tǒng)、什么對(duì)象模型和什么編程語(yǔ)言。
相反,Web服務(wù)的聯(lián)接非常松散。這就意味者你可以在聯(lián)接的任何一端任意改變接口,而應(yīng)用程序可以不受影響地照常工作。從技術(shù)上說(shuō),這主要是由于使用了擁有穩(wěn)固性能的基于消息的異步技術(shù),如像HTTP、SMTP等Web標(biāo)準(zhǔn)協(xié)議。而且最重要的是,XML可以幫助實(shí)現(xiàn)其通用性。
作為一個(gè)宏偉的計(jì)劃,.NET的路還很長(zhǎng)。今后的發(fā)展無(wú)論是崎嶇坎坷還是一片光明,在對(duì)新技術(shù)和IT產(chǎn)業(yè)的推動(dòng)上,微軟都是功不可沒(méi)的。
消息系統(tǒng)將通信的基本單元打包進(jìn)自描述的、運(yùn)用于網(wǎng)絡(luò)通信層的包(被稱做消息)。消息系統(tǒng)和分布式對(duì)象系統(tǒng)的關(guān)鍵區(qū)別在于,發(fā)送者需要對(duì)接收者的系統(tǒng)了解多少。使用分布式的對(duì)象系統(tǒng),發(fā)送者需要幫助接收者考慮許多問(wèn)題,比如應(yīng)用程序?qū)⑷绾渭せ詈托遁d、調(diào)用的是什么接口等等。
另一方面,消息系統(tǒng)在通訊層上達(dá)成協(xié)議。發(fā)送者只需考慮的是接收者能夠知道信息正被發(fā)送。發(fā)送方不需要了解一旦消息被收到后將會(huì)如何處理,也不需要對(duì)發(fā)送方和接收方之間作任何考慮。
在通訊層上達(dá)成協(xié)議的優(yōu)勢(shì)是顯而易見(jiàn)的。例如,協(xié)議能夠使接收方隨時(shí)作修改而無(wú)須中斷發(fā)送方,只要該協(xié)議始終明白是同一條消息。接收方不用中斷任何當(dāng)前應(yīng)用程序,可以自由升級(jí)和改進(jìn)。更進(jìn)一步說(shuō),就是發(fā)送方不用要求任何特殊的軟件就可以和接收方交談,只要他發(fā)送的是符合格式的信息,接收方就可以作出應(yīng)答。
■XML的通訊基礎(chǔ):SOAP
建造跨越Web的 Web服務(wù)的工作和異步系統(tǒng)的關(guān)鍵是使用統(tǒng)一的數(shù)據(jù)說(shuō)明格式,這就是XML。特別說(shuō)明的是,Web服務(wù)器在三方面需要XML來(lái)實(shí)現(xiàn):基礎(chǔ)語(yǔ)言、服務(wù)說(shuō)明以及服務(wù)發(fā)現(xiàn)。
● SOAP:系統(tǒng)在底層需要有統(tǒng)一語(yǔ)言,特別地,應(yīng)用程序相互通訊需要建立一套規(guī)則來(lái)說(shuō)明如何表示不同數(shù)據(jù)類型(如整數(shù)和數(shù)組),如何表示命令(如進(jìn)行數(shù)據(jù)處理)。同時(shí),應(yīng)用程序在需要時(shí)還可以擴(kuò)充這種語(yǔ)言。簡(jiǎn)單對(duì)象存取協(xié)議SOAP(Simple Object Access Protocol),這是XML的一種實(shí)現(xiàn),代表了一組如何表示和擴(kuò)充數(shù)據(jù)和命令的規(guī)則集。
● WDSL(Web Services描述語(yǔ)言) :一旦應(yīng)用程序有了如何表述數(shù)據(jù)和命令的基本規(guī)則,他們就需要如何描述可以接收的特定數(shù)據(jù)和命令。應(yīng)用程序只是聲明如何接收整數(shù)是不夠的,他們必須用明確的方法聲明。如給你兩個(gè)整數(shù),把它們相乘。WDSL是一種XML語(yǔ)法,開(kāi)發(fā)人員和開(kāi)發(fā)工具可以用它來(lái)表示W(wǎng)eb服務(wù)的功能。
● SOAP Discovery:最后需要一組規(guī)則來(lái)定位服務(wù)的描述——對(duì)于開(kāi)發(fā)者和開(kāi)發(fā)工具在什么地方可以發(fā)現(xiàn)一個(gè)Web服務(wù)。SOAP Discovery規(guī)范提供了一組規(guī)則讓開(kāi)發(fā)者和開(kāi)發(fā)工具可以自動(dòng)發(fā)現(xiàn)Web服務(wù)的描述。
一旦這些準(zhǔn)備好了,開(kāi)發(fā)者可以方便地發(fā)現(xiàn)Web 服務(wù),把它作為一個(gè)對(duì)象集成進(jìn)他們的應(yīng)用程序,并使應(yīng)用程序和Web服務(wù)相互通訊。
■.NET框架:Web服務(wù)引擎
很顯然,許多基本結(jié)構(gòu)都需實(shí)現(xiàn)上述進(jìn)程對(duì)開(kāi)發(fā)人員和用戶的透明化。.NET框架(.NET Framework)提供此基本結(jié)構(gòu)。從.NET框架角度看,所有組件都可以是Web服務(wù),而Web服務(wù)也僅是一種組件。實(shí)際上,.NET框架提取出微軟組件對(duì)象模型(COM)的精華,將它們與松散聯(lián)接計(jì)算的精華有機(jī)地結(jié)合在一起,生成了強(qiáng)大、高效的Web組件系統(tǒng):簡(jiǎn)化程序員的“管道”操作,深入地集成了安全性,引進(jìn)了基于互聯(lián)網(wǎng)的操作系統(tǒng),極大地改善應(yīng)用程序的可靠性和可擴(kuò)展性。
.NET框架由三個(gè)主要部分組成:通用語(yǔ)言運(yùn)行庫(kù)、一套層次結(jié)構(gòu)的統(tǒng)一類庫(kù)和一個(gè)被稱為ASP+的高級(jí)ASP版本。
有關(guān).NET的許多東西讓人印象深刻,尤其是微軟充分傳達(dá)出的對(duì)互聯(lián)網(wǎng)作為未來(lái)主要技術(shù)平臺(tái)的首肯,和在某些方面對(duì)公開(kāi)的標(biāo)準(zhǔn)的歡迎。
.NET的確牽動(dòng)著每個(gè)人的猜測(cè)……
1.通用語(yǔ)言運(yùn)行庫(kù)
除了通用語(yǔ)言運(yùn)行庫(kù)的字面含義外,在開(kāi)發(fā)階段和運(yùn)行過(guò)程中它還扮演著另一個(gè)角色。在組件運(yùn)行時(shí),運(yùn)行庫(kù)負(fù)責(zé)管理內(nèi)存分配、啟動(dòng)和中止線程和進(jìn)程、強(qiáng)化安全系數(shù),同時(shí)還調(diào)整任何該組件涉及到的其他組件的附件配置。在開(kāi)發(fā)階段,運(yùn)行庫(kù)的角色稍微有點(diǎn)變化:因?yàn)楹芏喾矫婵梢宰詣?dòng)實(shí)現(xiàn)(例如內(nèi)存管理等)。運(yùn)行庫(kù)可以使開(kāi)發(fā)過(guò)程變得非常簡(jiǎn)單,特別是同今天的COM編程相比更是如此。特別典型的是,像Reflection這樣的特性可以極大地縮小開(kāi)發(fā)人員將商業(yè)邏輯轉(zhuǎn)化成一個(gè)可重復(fù)使用的組件而不得不編寫的代碼數(shù)量。
運(yùn)行庫(kù)對(duì)于編程語(yǔ)言來(lái)說(shuō)并不是新鮮的東西。實(shí)際上每一種編程語(yǔ)言都已包含一個(gè)運(yùn)行庫(kù)。Visual Basic開(kāi)發(fā)系統(tǒng)有最明顯的運(yùn)行庫(kù)(正規(guī)名字為VBRUN),Visual C++也有一個(gè)MSVCRT,此外,像Visual FoxPro、Jscript、SmallTalk、Perl、Python和Java等等都如此。.NET框架的關(guān)鍵角色就是它提供了一個(gè)跨所有編程語(yǔ)言的統(tǒng)一環(huán)境。
2.統(tǒng)一編程類
.NET框架類為開(kāi)發(fā)人員提供了一套可以使用的統(tǒng)一的面向?qū)ο?、異步、層次結(jié)構(gòu)的可擴(kuò)展類庫(kù)。現(xiàn)在,C++的使用者使用Microsoft Foundation Classes,Java程序員使用Windows Foundation Classes,Visual Basic的用戶使用Visual Basic APIs。微軟用.NET框架統(tǒng)一了這些不同的框架。結(jié)果是,開(kāi)發(fā)人員不用非去學(xué)多個(gè)框架來(lái)完成自己的工作。而且,通過(guò)創(chuàng)建一套跨編程語(yǔ)言的通用API,.NET框架可以實(shí)現(xiàn)跨語(yǔ)言繼承、糾錯(cuò)處理以及程序調(diào)試。實(shí)際上,從JScript 到C++的所有編程語(yǔ)言,對(duì)于.Net框架都是相互等同的,開(kāi)發(fā)人員可以自由地選擇他們想使用的任何語(yǔ)言。
.NET是一種全新的平臺(tái),它將對(duì)現(xiàn)有的所有代碼產(chǎn)生影響。蓋茨說(shuō):“微軟所有的產(chǎn)品都會(huì)被涉及。我們的整個(gè)戰(zhàn)略是圍繞這個(gè)平臺(tái)展開(kāi)的?!?
3.ASP+
ASP+是使用 .NET框架提供的類庫(kù)構(gòu)建而成的,它提供了一個(gè)Web應(yīng)用程序模型,該模型由一組控件和一個(gè)基本結(jié)構(gòu)組成。有了它,Web應(yīng)用程序的構(gòu)建變得非常容易。開(kāi)發(fā)人員可以直接使用ASP+控件集,該控件集封裝了公共的、用于超文本標(biāo)識(shí)語(yǔ)言(HTML)用戶界面的各種小組件(諸如文本框、下拉選單等等)。實(shí)際上,這些控件運(yùn)行在Web服務(wù)器上,它們將用戶界面轉(zhuǎn)換成HTML格式后再發(fā)送給瀏覽器。在服務(wù)器上,控件負(fù)責(zé)將面向?qū)ο蟮木幊棠P统尸F(xiàn)給Web開(kāi)發(fā)人員,這種編程模型能提供面向?qū)ο蟮木幊碳夹g(shù)擁有的豐富功能。ASP+還提供一些基本結(jié)構(gòu)服務(wù)(諸如會(huì)話狀態(tài)管理和進(jìn)程循環(huán)),這些服務(wù)進(jìn)一步減少了開(kāi)發(fā)人員要編寫的代碼量,并使應(yīng)用程序的可靠性得到了大幅度提高。ASP+還允許開(kāi)發(fā)人員將軟件作為一項(xiàng)服務(wù)進(jìn)行傳送。通過(guò)使用ASP+ Web服務(wù)功能,ASP+開(kāi)發(fā)人員只需進(jìn)行簡(jiǎn)單的業(yè)務(wù)邏輯編程,而由ASP+基本結(jié)構(gòu)負(fù)責(zé)通過(guò)SOAP傳送服務(wù)。
盡管ASP+還未正式發(fā)行,但它已在改進(jìn)應(yīng)用程序功能方面創(chuàng)造出了令人難以置信的奇跡:在現(xiàn)有基于ASP的應(yīng)用程序性能基礎(chǔ)上,性能優(yōu)化了三倍之多,更為激動(dòng)人心的是生產(chǎn)效率再度攀升。
■.NET框架的核心部分
.NET框架有幾個(gè)要素值得一提。首先是它的安全系統(tǒng)和配置系統(tǒng)。這兩個(gè)系統(tǒng)協(xié)同工作,有力地遏止了運(yùn)行不安全代碼的可能性,并大幅度減少了號(hào)稱“DLL Hell”的對(duì)應(yīng)用程序進(jìn)行配置時(shí)所面臨的挑戰(zhàn)。
安全系統(tǒng)是一個(gè)高度細(xì)化、基于事實(shí)的系統(tǒng),它賦予開(kāi)發(fā)人員和管理員多種代碼處理權(quán)限(而不僅僅是“on”或“off”)。將來(lái),還會(huì)根據(jù)代碼本身的核心要素來(lái)決定如何實(shí)施上述權(quán)限。
例如,當(dāng).NET框架應(yīng)用程序被下載到某一系統(tǒng)中時(shí),它會(huì)申請(qǐng)一組權(quán)限(諸如對(duì)臨時(shí)目錄的寫入權(quán)限)。運(yùn)行時(shí)將收集有關(guān)應(yīng)用程序的事實(shí)信息(諸如:它是從何處下載的、是否用了有效簽名、甚至它訪問(wèn)系統(tǒng)的準(zhǔn)確程度),并按管理策略決定是否允許應(yīng)用程序運(yùn)行。運(yùn)行時(shí)甚至還可告之應(yīng)用程序它無(wú)法授權(quán)申請(qǐng)的所有權(quán)限,并允許應(yīng)用程序自行決定是否繼續(xù)運(yùn)行。
有這種安全系統(tǒng)作保障,許多應(yīng)用程序配置問(wèn)題便會(huì)迎刃而解。開(kāi)發(fā)人員和管理員(最終是用戶)所面臨的最大挑戰(zhàn)之一是版本的管理問(wèn)題。如果在您新裝了某個(gè)應(yīng)用程序之后,一切都陷于癱瘓狀態(tài),而在這之前系統(tǒng)一直運(yùn)行得非常良好,那么最大的可能是新安裝的應(yīng)用程序重寫了一些共享庫(kù),并極有可能修正了現(xiàn)有應(yīng)用程序正使用的程序錯(cuò)誤。這種情況出現(xiàn)的頻率很高,以致人們將它稱為:“DLL Hell”。
.NET框架擁有的幾項(xiàng)高級(jí)功能可以徹底消除“DLL Hell”現(xiàn)象。首先,它有一個(gè)非常強(qiáng)大的內(nèi)部命名系統(tǒng),能夠有效地防止兩個(gè)庫(kù)因互相重名而被錯(cuò)當(dāng)為對(duì)方的情況發(fā)生。除此之外,它還提供一項(xiàng)被稱作“side by side”配置的新功能。如果前例中新安裝的應(yīng)用程序確實(shí)重寫了共享庫(kù),現(xiàn)有應(yīng)用程序可對(duì)該庫(kù)進(jìn)行修復(fù)。等現(xiàn)有應(yīng)用程序再次啟動(dòng)時(shí),它會(huì)檢查所有的共享文件。如果發(fā)現(xiàn)文件被更改,同時(shí)這些更改又是不兼容的,則它可以請(qǐng)求運(yùn)行時(shí)提取一個(gè)它可以使用的版本。得益于強(qiáng)大的安全系統(tǒng),運(yùn)行時(shí)可以安全地執(zhí)行該操作,這樣應(yīng)用程序就完成了本身的修復(fù)工作。
■編者語(yǔ)
人們總是喜歡不厭其煩地發(fā)表諸如“互聯(lián)網(wǎng)改變了一切”的陳詞。同樣地,在談?wù)摶ヂ?lián)網(wǎng)給人類帶來(lái)的影響時(shí),總是情不自禁地使用廣告式的夸張語(yǔ),以表達(dá)對(duì)互聯(lián)網(wǎng)的推崇。不過(guò),互聯(lián)網(wǎng)的確徹底改變了應(yīng)用程序的開(kāi)發(fā)模式和配置方式。將分發(fā)軟件演變成一種服務(wù)還有待人們的共同努力,XML是實(shí)現(xiàn)這個(gè)夢(mèng)想的重要手段。.NET框架是微軟開(kāi)發(fā)人員戰(zhàn)略的核心內(nèi)容,它旨在幫助開(kāi)發(fā)人員輕松地構(gòu)建、配置和運(yùn)行Web服務(wù)。
總之,.NET的最先受益者,將是我們的開(kāi)發(fā)人員。.NET的路還很長(zhǎng),今后的發(fā)展無(wú)論是崎嶇坎坷還是一片光明,在對(duì)新技術(shù)和IT產(chǎn)業(yè)的推動(dòng)上,微軟都是功不可沒(méi)的。