.NET架構的核心開發技術

不可否認,應用軟件的開發正在經歷一次鉅變——將最終增強開發人員的生產力並開啓一道通向全新概念的應用程序的大門。

  新型的開發模式正逐漸被推廣,將分發軟件演變成一種服務還有待於所有開發人員的共同努力,而互聯網卻將徹底改變應用程序的開發模式和配置方式。

  傳統上,軟件開發人員通過集成本地系統服務的方式開發應用程序。這種模型使開發人員有權使用一整套豐富的開發資源,精確控制應用程序的性能。

  如今,開發人員在很大程度上已掙脫了這種模式的束縛,致力於構建具有複雜結構的n層系統,這種系統能將網絡中各處的衆多的應用程序進行集成,並大大提升應用程序的價值。這樣,開發人員便可集中精力挖掘軟件獨特的商業價值,而不必日夜爲如何構建基本結構傷腦筋了。令人欣喜的局面將應運而生:軟件投放市場的時間大大縮短、開發人員的編程效率明顯提高,最爲根本的是開發出質量上乘的軟件。

  我們正在進入計算機發展的下一個階段——基於Internet的階段,特別是基於Internet核心技術——XML擴充標記語言。儘管多層應用程序開發將焦點集中在建造大型企業級應用程序上,但現在XML使得能夠創建可用於任何人、任何場所的大型應用程序。它擴大了應用程序的使用範圍。這樣,軟件就不是隻能從CD上安裝的某種東西,而是一種服務——就像呼叫服務或者計費電視一樣,可以通過通信媒體來預訂。

  這一切,是通過將緊密聯接的、高效的n層計算技術與面向消息的、鬆散聯接的Web概念相結合來實現的。我們將這種計算風格稱爲Web Service(Web服務),它的出現標誌着人類已經邁入應用程序開發技術的新紀元。Web服務是一種應用程序,它可以使用標準的互聯網協議,像超文本傳輸協議(HTTP)和XML,將功能綱領性地體現在互聯網和企業內部網上。

  我們也可將Web服務視作Web上的組件編程。

  從理論上講,開發人員通過調用Web應用編程接口(API),將Web服務集成進他們的應用程序,就像調用本地服務一樣。兩者區別在於前者能夠通過Internet發送到某個遠程系統的服務上。例如,像微軟護照(Microsoft Passport)這樣的服務,可以給開發人員提供應用程序身份確認的功能。通過對護照服務編程,開發人員就可以利用護照服務的基礎體系,實現維護用戶數據庫,確信服務開啓和運行以及正確地備份等等功能。

  ■鬆散聯接

  跨越網絡的分佈應用程序邏輯的概念並不是一個新名詞,但跨越Web的分佈和集成應用程序邏輯的概念卻是。

  此前,像微軟的DCOM (Distributed Component Object Model )、Object Management Group公司的CORBA (Common Object Request Broker Architecture )以及Sun公司的RMI(Remote Method Invocation )這些分佈式對象模型被稱爲分佈應用程序邏輯。運用這些系統結構,雖然服務放在遠程系統上,開發人員仍然可以像原來本機編程那樣維護和豐富應用程序的功能。

  但這種系統的問題是不能擴展到Internet。因爲該體系的基礎是服務器上的客戶端和服務器的緊密聯結。這意味着兩者必須是同質的基礎體系,但也就常常意味着這種系統是非常脆弱的,如果有任何一端接口發生變化,另一端程序必然就會被中斷。舉個例子,如果服務器應用程序的接口改變了,那麼客戶端也將會失效。

  開發中要求有一個緊密聯接的系統這本身沒有錯,而且許多應用程序也一直就是建立在這些系統上的。但最終,隨着時間的流逝,這種模型是不會擴展的。因爲衆多公司企業要求相互溝通,這很難保證會有一個統一的系統,同樣也很難保證,你的客戶的服務器會有你所需要的完全一致的系統,你甚至都不可能猜想到它所用的是什麼操作系統、什麼對象模型和什麼編程語言。

  相反,Web服務的聯接非常鬆散。這就意味者你可以在聯接的任何一端任意改變接口,而應用程序可以不受影響地照常工作。從技術上說,這主要是由於使用了擁有穩固性能的基於消息的異步技術,如像HTTP、SMTP等Web標準協議。而且最重要的是,XML可以幫助實現其通用性。

  作爲一個宏偉的計劃,.NET的路還很長。今後的發展無論是崎嶇坎坷還是一片光明,在對新技術和IT產業的推動上,微軟都是功不可沒的。

  消息系統將通信的基本單元打包進自描述的、運用於網絡通信層的包(被稱做消息)。消息系統和分佈式對象系統的關鍵區別在於,發送者需要對接收者的系統瞭解多少。使用分佈式的對象系統,發送者需要幫助接收者考慮許多問題,比如應用程序將如何激活和卸載、調用的是什麼接口等等。

  另一方面,消息系統在通訊層上達成協議。發送者只需考慮的是接收者能夠知道信息正被髮送。發送方不需要了解一旦消息被收到後將會如何處理,也不需要對發送方和接收方之間作任何考慮。

  在通訊層上達成協議的優勢是顯而易見的。例如,協議能夠使接收方隨時作修改而無須中斷髮送方,只要該協議始終明白是同一條消息。接收方不用中斷任何當前應用程序,可以自由升級和改進。更進一步說,就是發送方不用要求任何特殊的軟件就可以和接收方交談,只要他發送的是符合格式的信息,接收方就可以作出應答。

  ■XML的通訊基礎:SOAP

  建造跨越Web的 Web服務的工作和異步系統的關鍵是使用統一的數據說明格式,這就是XML。特別說明的是,Web服務器在三方面需要XML來實現:基礎語言、服務說明以及服務發現。

  ● SOAP:系統在底層需要有統一語言,特別地,應用程序相互通訊需要建立一套規則來說明如何表示不同數據類型(如整數和數組),如何表示命令(如進行數據處理)。同時,應用程序在需要時還可以擴充這種語言。簡單對象存取協議SOAP(Simple Object Access Protocol),這是XML的一種實現,代表了一組如何表示和擴充數據和命令的規則集。

  ● WDSL(Web Services描述語言) :一旦應用程序有了如何表述數據和命令的基本規則,他們就需要如何描述可以接收的特定數據和命令。應用程序只是聲明如何接收整數是不夠的,他們必須用明確的方法聲明。如給你兩個整數,把它們相乘。WDSL是一種XML語法,開發人員和開發工具可以用它來表示Web服務的功能。

  ● SOAP Discovery:最後需要一組規則來定位服務的描述——對於開發者和開發工具在什麼地方可以發現一個Web服務。SOAP Discovery規範提供了一組規則讓開發者和開發工具可以自動發現Web服務的描述。

  一旦這些準備好了,開發者可以方便地發現Web 服務,把它作爲一個對象集成進他們的應用程序,並使應用程序和Web服務相互通訊。

  ■.NET框架:Web服務引擎

  很顯然,許多基本結構都需實現上述進程對開發人員和用戶的透明化。.NET框架(.NET Framework)提供此基本結構。從.NET框架角度看,所有組件都可以是Web服務,而Web服務也僅是一種組件。實際上,.NET框架提取出微軟組件對象模型(COM)的精華,將它們與鬆散聯接計算的精華有機地結合在一起,生成了強大、高效的Web組件系統:簡化程序員的“管道”操作,深入地集成了安全性,引進了基於互聯網的操作系統,極大地改善應用程序的可靠性和可擴展性。

  .NET框架由三個主要部分組成:通用語言運行庫、一套層次結構的統一類庫和一個被稱爲ASP+的高級ASP版本。

  有關.NET的許多東西讓人印象深刻,尤其是微軟充分傳達出的對互聯網作爲未來主要技術平臺的首肯,和在某些方面對公開的標準的歡迎。

  .NET的確牽動着每個人的猜測……

  1.通用語言運行庫

  除了通用語言運行庫的字面含義外,在開發階段和運行過程中它還扮演着另一個角色。在組件運行時,運行庫負責管理內存分配、啓動和中止線程和進程、強化安全係數,同時還調整任何該組件涉及到的其他組件的附件配置。在開發階段,運行庫的角色稍微有點變化:因爲很多方面可以自動實現(例如內存管理等)。運行庫可以使開發過程變得非常簡單,特別是同今天的COM編程相比更是如此。特別典型的是,像Reflection這樣的特性可以極大地縮小開發人員將商業邏輯轉化成一個可重複使用的組件而不得不編寫的代碼數量。

  運行庫對於編程語言來說並不是新鮮的東西。實際上每一種編程語言都已包含一個運行庫。Visual Basic開發系統有最明顯的運行庫(正規名字爲VBRUN),Visual C++也有一個MSVCRT,此外,像Visual FoxPro、Jscript、SmallTalk、Perl、Python和Java等等都如此。.NET框架的關鍵角色就是它提供了一個跨所有編程語言的統一環境。

  2.統一編程類

  .NET框架類爲開發人員提供了一套可以使用的統一的面向對象、異步、層次結構的可擴展類庫。現在,C++的使用者使用Microsoft Foundation Classes,Java程序員使用Windows Foundation Classes,Visual Basic的用戶使用Visual Basic APIs。微軟用.NET框架統一了這些不同的框架。結果是,開發人員不用非去學多個框架來完成自己的工作。而且,通過創建一套跨編程語言的通用 API,.NET框架可以實現跨語言繼承、糾錯處理以及程序調試。實際上,從JScript 到C++的所有編程語言,對於.Net框架都是相互等同的,開發人員可以自由地選擇他們想使用的任何語言。

  .NET是一種全新的平臺,它將對現有的所有代碼產生影響。蓋茨說:“微軟所有的產品都會被涉及。我們的整個戰略是圍繞這個平臺展開的。”

  3.ASP+

  ASP+是使用 .NET框架提供的類庫構建而成的,它提供了一個Web應用程序模型,該模型由一組控件和一個基本結構組成。有了它,Web應用程序的構建變得非常容易。開發人員可以直接使用ASP+控件集,該控件集封裝了公共的、用於超文本標識語言(HTML)用戶界面的各種小組件(諸如文本框、下拉選單等等)。實際上,這些控件運行在Web服務器上,它們將用戶界面轉換成HTML格式後再發送給瀏覽器。在服務器上,控件負責將面向對象的編程模型呈現給Web開發人員,這種編程模型能提供面向對象的編程技術擁有的豐富功能。ASP+還提供一些基本結構服務(諸如會話狀態管理和進程循環),這些服務進一步減少了開發人員要編寫的代碼量,並使應用程序的可靠性得到了大幅度提高。ASP+還允許開發人員將軟件作爲一項服務進行傳送。通過使用ASP+ Web服務功能,ASP+開發人員只需進行簡單的業務邏輯編程,而由ASP+基本結構負責通過SOAP傳送服務。

  儘管ASP+還未正式發行,但它已在改進應用程序功能方面創造出了令人難以置信的奇蹟:在現有基於ASP的應用程序性能基礎上,性能優化了三倍之多,更爲激動人心的是生產效率再度攀升。

  ■.NET框架的核心部分

  .NET框架有幾個要素值得一提。首先是它的安全系統和配置系統。這兩個系統協同工作,有力地遏止了運行不安全代碼的可能性,並大幅度減少了號稱“DLL Hell”的對應用程序進行配置時所面臨的挑戰。

  安全系統是一個高度細化、基於事實的系統,它賦予開發人員和管理員多種代碼處理權限(而不僅僅是“on”或“off”)。將來,還會根據代碼本身的核心要素來決定如何實施上述權限。

  例如,當.NET框架應用程序被下載到某一系統中時,它會申請一組權限(諸如對臨時目錄的寫入權限)。運行時將收集有關應用程序的事實信息(諸如:它是從何處下載的、是否用了有效簽名、甚至它訪問系統的準確程度),並按管理策略決定是否允許應用程序運行。運行時甚至還可告之應用程序它無法授權申請的所有權限,並允許應用程序自行決定是否繼續運行。

  有這種安全系統作保障,許多應用程序配置問題便會迎刃而解。開發人員和管理員(最終是用戶)所面臨的最大挑戰之一是版本的管理問題。如果在您新裝了某個應用程序之後,一切都陷於癱瘓狀態,而在這之前系統一直運行得非常良好,那麼最大的可能是新安裝的應用程序重寫了一些共享庫,並極有可能修正了現有應用程序正使用的程序錯誤。這種情況出現的頻率很高,以致人們將它稱爲:“DLL Hell”。

  .NET框架擁有的幾項高級功能可以徹底消除“DLL Hell”現象。首先,它有一個非常強大的內部命名系統,能夠有效地防止兩個庫因互相重名而被錯當爲對方的情況發生。除此之外,它還提供一項被稱作 “side by side”配置的新功能。如果前例中新安裝的應用程序確實重寫了共享庫,現有應用程序可對該庫進行修復。等現有應用程序再次啓動時,它會檢查所有的共享文件。如果發現文件被更改,同時這些更改又是不兼容的,則它可以請求運行時提取一個它可以使用的版本。得益於強大的安全系統,運行時可以安全地執行該操作,這樣應用程序就完成了本身的修復工作。

  ■後記

  人們總是喜歡不厭其煩地發表諸如“互聯網改變了一切”的陳詞。同樣地,在談論互聯網給人類帶來的影響時,總是情不自禁地使用廣告式的誇張語,以表達對互聯網的推崇。不過,互聯網的確徹底改變了應用程序的開發模式和配置方式。將分發軟件演變成一種服務還有待人們的共同努力,XML是實現這個夢想的重要手段。.NET框架是微軟開發人員戰略的核心內容,它旨在幫助開發人員輕鬆地構建、配置和運行Web服務。

  總之,.NET的最先受益者,將是我們的開發人員。.NET的路還很長,今後的發展無論是崎嶇坎坷還是一片光明,在對新技術和IT產業的推動上,微軟都是功不可沒的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章