我不敢自稱為.net的專家,但我想我已經(jīng)足夠多的介入到了它的設(shè)計(jì)、開發(fā)過程之中,所以我能夠提供一些有用的信息以幫助大家明白.net的定位、目的和目標(biāo)。所以雖然接下來的內(nèi)容并不提供開發(fā)級的信息,不能告訴你怎樣使用.net開發(fā)程序,但確實(shí)能夠給你一些指引,使你至少能夠?yàn)槟愕耐禄蚣胰酥v述.net。
回憶過去
首先,我們要回去看看新的編程模式是怎樣進(jìn)化成為操作系統(tǒng)的一部分的。現(xiàn)在設(shè)想一下我們回到了80年代初。那時,在考慮購買一臺計(jì)算機(jī)的時候,ibm個人電腦已經(jīng)開始成為眾多的選擇對象之一了。它的操作系統(tǒng)是ms-dos,和那時幾乎所有的操作系統(tǒng)一樣,這是個嚴(yán)格的命令行的,基于文本的操作系統(tǒng)。
雖然當(dāng)時絕大多數(shù)的應(yīng)用程序在這些早期的計(jì)算機(jī)的基于文本的環(huán)境中運(yùn)行良好,但有些程序員開始接受挑戰(zhàn)去創(chuàng)造屬于他們自己的,圖形化的環(huán)境。用戶首先用基于文本的的操作系統(tǒng)啟動,然后運(yùn)行程序切換到圖形模式。這類的程序有的比較簡單,只提供很少的功能,而有的則相對強(qiáng)大,功能多樣。
要為這些程序設(shè)計(jì)和實(shí)現(xiàn)一套圖形用戶接口(gui)庫需要做相當(dāng)多的工作。特別痛苦的是在這些不同的實(shí)現(xiàn)中幾乎沒有任何共同點(diǎn)。要完全實(shí)現(xiàn)一個真正強(qiáng)大的gui,需要從操作系統(tǒng)級做起。所以到后來,apple,microsoft和其他公司開發(fā)出了圖形界面的操作系統(tǒng),這些系統(tǒng)不僅支持開發(fā)gui的應(yīng)用程序,還極大地?cái)U(kuò)展了這些程序的能力,其提供的庫不單單是支持窗口和菜單的繪制,還提供了豐富的的系統(tǒng)服務(wù),以使開發(fā)者工作更加流暢。這些服務(wù)包括與設(shè)備無關(guān)的打印模式,甚至是系統(tǒng)剪貼板等等,這些都是對開發(fā)者非常有用的資源。
我希望我對這段歷史得還算清楚,我們將從這里開始。
回到現(xiàn)在
現(xiàn)在我們跳回到現(xiàn)在。想象一下internet正扮演著80年代初個人電腦的角色,web站點(diǎn)就是當(dāng)初的程序。如果這個web站點(diǎn)只是包括一些超鏈或者是一些文本文檔,那它就像是過去的一個文本模式的程序,如果這個站點(diǎn)提供交互式的服務(wù)的話,那它就可以被比作是當(dāng)時的gui的程序了。在交互式的服務(wù)下,用戶提供信息給web站點(diǎn),這些信息在web站點(diǎn)中被交給應(yīng)用程序邏輯來處理然后產(chǎn)生一個結(jié)果。這樣的例子有購物車、altavista提供的翻譯服務(wù)和ups提供的包裹跟蹤服務(wù)等等。
首先來看看購物車這個例子。幾乎所有的購物車都將支持輸入信用卡信息。很多時候這些信息只是作為交易信息的一部分而被記錄下來,一個好的購物車將應(yīng)該能夠快速而且精確的向信用卡的發(fā)卡公司校驗(yàn)信用卡信息,如果用戶輸入了錯誤的信息,就應(yīng)當(dāng)給用戶一個提醒。但當(dāng)這個web站點(diǎn)想支持一種新的信用卡類型時它該怎么辦呢?這個站點(diǎn)的開發(fā)者必須聯(lián)系那個信用卡公司,找出他們支持的(如果有的話)電子校驗(yàn)服務(wù),然后根據(jù)那個公司的電子校驗(yàn)的實(shí)現(xiàn)寫自己的代碼與其配合。
翻譯服務(wù)又會怎么樣呢?如果我們正在寫一個e-mail 的程序,難道你不覺得在你的程序中加入即時翻譯功能會非常有用嗎?altavista就有提供了這種服務(wù)的站點(diǎn),你可以悄悄的啟動一個隱藏的瀏覽器控件,給它一些必要的信息,然后查看它返回的信息,在返回的頁面上定位翻譯好了的信息的位置,最后把它提取出來提供給用戶。這和有些圖形界面的應(yīng)用程序從文本模式的程序或者是大型計(jì)算機(jī)終端中獲取信息的方式有些類似。這就是廣為所知的屏幕截取,這種方式比較復(fù)雜而且相當(dāng)脆弱,因?yàn)槟繕?biāo)屏幕的布局發(fā)生變化,即使是很細(xì)微的變化將會帶來很嚴(yán)重的問題,而且在有些情況下這種實(shí)現(xiàn)顯得并不道德。
現(xiàn)在我們來討論討論包裹跟蹤服務(wù),想象一下如果你的站點(diǎn)允許你的用戶查詢他們所定購的貨物的當(dāng)前狀態(tài)會是會多么棒呀。通過ups的追蹤編號來提供這些信息將會是非常有效的,或者是把這些信息做成到ups站點(diǎn)的鏈接,然后你的用戶就會得到關(guān)于他們包裹目前狀態(tài)的詳細(xì)報(bào)告了,也許這個時候這些包裹還正在漂洋過海呢。但你覺不覺得這樣會更方便,那就是你的站點(diǎn)和ups的站點(diǎn)交互工作,然后在你自己的網(wǎng)站上提供這些信息?這樣的話,這些信息就會和你的站點(diǎn)的其它部分一樣共享相同的用戶界面,而且不用擔(dān)心用戶不小心迷失在ups站點(diǎn)后不知道怎樣回到你的站點(diǎn)了。
為了給用戶提供集成服務(wù)的體驗(yàn),上面的例子或者需要你從其他公司找到以編程方式得到他們的服務(wù)的方法,然后為這些服務(wù)開發(fā)自己的用戶界面;或者是寫一個屏幕截取程序來截取相應(yīng)的信息,如果已有公司通過web 提供了的相同服務(wù)的話。
非常明顯,無論是那種實(shí)現(xiàn)方式,代碼量和耦合度都太大,而且還存在很多潛在的問題和失靈的可能。這些途徑在本質(zhì)上很象80年代時強(qiáng)迫文本模式的程序與操作系統(tǒng)還不能直接支持的設(shè)備進(jìn)行交互一樣。
標(biāo)準(zhǔn)協(xié)議
一種比較好的解決方案應(yīng)該是一套通用的、能夠和遠(yuǎn)程服務(wù)交互的途徑,這種途徑不僅僅連接能夠某個公司的服務(wù),而且能夠發(fā)現(xiàn)這個公司提供什么樣的服務(wù),就象xml、soap和uddi的目標(biāo)那樣。xml(擴(kuò)展的標(biāo)記語言)將信息表示成一種易于按你的需要進(jìn)行編程獲取或處理的格式,soap(simple object access protocol)基于xml,特別的被設(shè)計(jì)來提供遠(yuǎn)程服務(wù)的接口信息。而uddi(universal description, discovery, and intergration)是業(yè)界倡導(dǎo)的,具有對internet服務(wù)和資源的探測能力的一套標(biāo)準(zhǔn)。
在方便的連接和利用另一個站點(diǎn)所愿意提供的服務(wù)這條漫漫長路上,這些標(biāo)準(zhǔn)接口正在努力前行。但是由于當(dāng)前的操作系統(tǒng)還不能夠直接支持xml/soap,你必須在跳過一些障礙后才能使用這些接口。你可以寫你自己的基于xml的編譯引擎,或者使用別人的,然后與xml文檔對象模型進(jìn)行交互,創(chuàng)建出和檢驗(yàn)被來回傳遞的數(shù)據(jù)。這很有意義,而且絕對比求助于屏幕截取容易多了。
進(jìn)入.net
更好的解決方案是所有的xml/soap/uddi都能夠被操作系統(tǒng)直接支持,然后由操作系統(tǒng)把它們作為相當(dāng)普通的函數(shù)調(diào)用或者是對象的交互來向你提供。例如,下面的這些東西提供了一種絕妙的方法來供應(yīng)用程序調(diào)用altavista的翻譯服務(wù)。
   avtrans = new avtranslation (“here is a sample line of text”, “english”);
   strresult = avtrans.translateto (“french”);
這就是.net的給我們帶來的好處之一。它不僅允許應(yīng)用程序直接訪問和利用遠(yuǎn)程的基于web的服務(wù),而且使得web服務(wù)器很容易地向外部的程序提供這種服務(wù)。這并不意味著提供web服務(wù)器要提供服務(wù),客戶端要利用web服務(wù)都非得要用.net不可,只不過是指利用.net平臺來進(jìn)行這些開發(fā)更加便利而已。
屬性、方法和事件。哦,我的天!
.net的設(shè)計(jì),當(dāng)然不是只停止在internet接口這個層面上。訪問遠(yuǎn)程服務(wù)的這種編程模型同樣也被應(yīng)用在本地服務(wù)的利用與內(nèi)部事務(wù)邏輯上。換句話說,這個編程模式將遍布在普遍的程序的設(shè)計(jì)中。
其目的在于提供一種統(tǒng)一的、面向組件的編程模型。無論你想顯示一個遠(yuǎn)程的翻譯服務(wù)還是本機(jī)的文件系統(tǒng)或者是一個對話框,所有的支持都將是一個一般化的基于組件的接口:屬性、方法和事件。支持的.net的編程語言可以容易而且融洽地使用這些組件,而不管這些組件使用什么樣的語言開發(fā)的,所有的這些語言都是平等的公民,一個vb應(yīng)用程序就能調(diào)用用c++編寫的組件的方法,同時捕獲cobol開發(fā)的應(yīng)用程序觸發(fā)的事件。而且協(xié)作者們再也不會意識到自己的伙伴在用另外的一種編程語言。
肯定的,應(yīng)用程序在利用這些服務(wù)以及架構(gòu)的優(yōu)勢上也是會分成很多層次的。你可你想象一下你曾經(jīng)在使用一臺連在一臺大型機(jī)的電傳打字機(jī)終端,有人向你解釋圖形界面的應(yīng)用程序是什么樣的,用多快的時間你就會掌握滾動條,組合框,菜單條以其調(diào)色板管理的精髓呢?.net就像在引出一種全新的開發(fā)應(yīng)用程序的思考方法。如果你僅看到了它的一部分,也許你不能發(fā)現(xiàn)它到底新在何處,而當(dāng)你當(dāng)你取得這個不可分割的整體的各方面的知識而且發(fā)現(xiàn)了其各部分如何協(xié)同工作后,你就會發(fā)現(xiàn)其中埋藏的巨大的興奮,至少對我是這樣。
我從來沒有任何打算讓這個對.net的粗略的討論深入到任何細(xì)節(jié)。我將在以后的文章中深入窺視.net的特色和能力。
新聞熱點(diǎn)
疑難解答
圖片精選