消除.NET極度狂熱下的4個(gè)誤解
發(fā)表時(shí)間:2023-08-16 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]Visual Studio .NET (VS.NET) 終于發(fā)布了,這個(gè)新平臺(tái)很快在開(kāi)發(fā)人員中流行開(kāi)來(lái)。然而,同任何新的技術(shù)一樣,人們對(duì)它也有很多擔(dān)心、不確定和遲疑——這種想法甚至比其它產(chǎn)品的更多。...
Visual Studio .NET (VS.NET) 終于發(fā)布了,這個(gè)新平臺(tái)很快在開(kāi)發(fā)人員中流行開(kāi)來(lái)。然而,同任何新的技術(shù)一樣,人們對(duì)它也有很多擔(dān)心、不確定和遲疑——這種想法甚至比其它產(chǎn)品的更多。在同.NET的預(yù)期采用者們進(jìn)行談?wù)摃r(shí),我發(fā)現(xiàn)人們對(duì)它的幾個(gè)普遍的誤解似乎是造成這種擔(dān)心和恐慌的原因。
這里我們重點(diǎn)解決人們對(duì).NET的四個(gè)最大的、最普遍的誤解。它們不僅會(huì)給人們帶來(lái)相當(dāng)大程度的、毫無(wú)根據(jù)的擔(dān)心,在某些情況下,也會(huì)讓人們對(duì).NET產(chǎn)生極度的狂熱——這兩種情況都會(huì)對(duì)成功采用.NET策略造成危害。
1. .NET 是基于 Win32 和 COM的
Microsoft的組件對(duì)象模型(COM)是Windows應(yīng)用程序組件結(jié)構(gòu)的核心和靈魂。過(guò)去,COM是Microsoft操作系統(tǒng)中編寫(xiě)的應(yīng)用程序、組件、工具和構(gòu)架的主要的互用層。如今,.NET和COM的關(guān)系使許多開(kāi)發(fā)人員把他們混淆在了一起,他們錯(cuò)誤地認(rèn)為.NET是現(xiàn)有的COM結(jié)構(gòu)的擴(kuò)展和演變。換句話說(shuō),許多開(kāi)發(fā)人員認(rèn)為.NET是基于COM的。
實(shí)際上,.NET在很大程度上完全是一個(gè)新的軟件平臺(tái)和組件結(jié)構(gòu)。本質(zhì)上,.NET把COM歸入到一個(gè)“遺留的”環(huán)境中。這當(dāng)然不是說(shuō)COM應(yīng)用程序在一夜之間就消失了;它們?cè)谖磥?lái)的幾年中很可能仍然存在。但是,正像Win32/COM在很短的時(shí)間內(nèi)替代了基于字符的DOS應(yīng)用程序一樣,這個(gè)“新產(chǎn)品”將為從COM到.NET的過(guò)渡提供一個(gè)起點(diǎn)。
在向.NET的過(guò)渡過(guò)程中,你可能會(huì)看到投入市場(chǎng)的新的基于COM的應(yīng)用程序越來(lái)越少。漸漸地,隨著時(shí)間的推移,.NET將替代基于COM的應(yīng)用程序,先形成一個(gè)混合的模式,然后到2005年,對(duì)于大多數(shù)基于Microsoft的解決方案,將會(huì)形成幾乎100%的純粹的.NET應(yīng)用程序。
開(kāi)發(fā)人員對(duì).NET和合稱為Win32的傳統(tǒng)的“本地”Windows編程APIs之間的關(guān)系也感到困惑。Win32描述了一系列具有各種兼容性的操作系統(tǒng)(OS),從現(xiàn)在不支持的Windows 95到Windows XP。雖然將.NET描述成是基于Win32的會(huì)稍微精確一些,但這種概念也并不完全正確。
的確,.NET構(gòu)架是依賴于底層的Win32 APIs而連接到OS的。然而,典型的.NET開(kāi)發(fā)人員——不同于如今的COM開(kāi)發(fā)人員(尤其是C++程序員)——將很少直接暴露在底層的Win32層中。作為替代,.NET構(gòu)架包含它自己的類庫(kù),這個(gè)類庫(kù)既完全代替了底層的部分Win32層,又作為一個(gè)封裝機(jī)制將開(kāi)發(fā)人員同其它部分的細(xì)節(jié)隔離開(kāi)。正像Visual Basic以前的版本將開(kāi)發(fā)人員同許多Win32的低級(jí)的“plumbing”細(xì)節(jié)隔離開(kāi)一樣,.NET取得了更大的進(jìn)展,它提供了一個(gè)完整的多語(yǔ)言軟件平臺(tái),該平臺(tái)在很大程度上完全從底層的OS隔離出來(lái)。所以,從傳統(tǒng)意義上講,典型的.NET開(kāi)發(fā)人員絕對(duì)不是Win32開(kāi)發(fā)人員。
對(duì)許多開(kāi)發(fā)人員來(lái)說(shuō),他們對(duì)COM和Win32的低級(jí)的細(xì)節(jié)問(wèn)題感到很苦惱,所以.NET很受他們的歡迎。對(duì)另外一些人來(lái)說(shuō),.NET的確讓他們感到恐慌。正因?yàn)?NET是“新奇”的,才形成了這種“玻璃杯半空半滿”的情況,我在二月份的專欄中對(duì)此做過(guò)探討(見(jiàn)資源)。一方面,.NET引進(jìn)了另人興奮的和有價(jià)值的新功能;另一方面,它是以一個(gè)新的、未經(jīng)考驗(yàn)的應(yīng)用程序構(gòu)架為代價(jià)的。
因?yàn)?NET構(gòu)架包括一個(gè)到老的COM世界的有力的過(guò)渡,所以相繼產(chǎn)生了另外的誤解。實(shí)際上,開(kāi)發(fā)人員可以將軟件服務(wù)(如程序、組件、模塊等等)呈現(xiàn)成COM組件,讓.NET組件來(lái)使用。同樣,開(kāi)發(fā)人員可以將.NET組件呈現(xiàn)為標(biāo)準(zhǔn)的COM組件。
一個(gè).NET開(kāi)發(fā)人員可以完全不用COM代碼來(lái)構(gòu)建整個(gè)應(yīng)用程序系統(tǒng)。他或她也可以構(gòu)建“混合的.NET”解決方案,將遺留的平臺(tái)同新的平臺(tái)結(jié)合起來(lái)。在Gartner公司,我們認(rèn)為這種混合模式將在采用.NET的最初幾年內(nèi)占統(tǒng)治地位,因?yàn)榇蠖鄶?shù)開(kāi)發(fā)人員在匆忙重寫(xiě)他們現(xiàn)有的COM應(yīng)用程序時(shí),發(fā)現(xiàn)TCO或ROI優(yōu)勢(shì)并不多。因此,一種“如果沒(méi)有被破壞,就不要修理”的策略使人們將現(xiàn)有的COM服務(wù)同不斷形成的.NET技術(shù)結(jié)合起來(lái)使用,這種趨勢(shì)將至少持續(xù)到2004年。
.NET采用者的經(jīng)驗(yàn):最不會(huì)帶來(lái)傷害的采用策略就是避免陷入企圖將你現(xiàn)有的基于COM的應(yīng)用程序“擴(kuò)展”得太多這種陷阱。你也應(yīng)該避免僅僅因?yàn)?NET很新就立即完全重寫(xiě)你現(xiàn)有的系統(tǒng)。對(duì)大多數(shù)企業(yè)來(lái)說(shuō),將.NET直接但漸進(jìn)地灌輸?shù)揭粋(gè)軟件開(kāi)發(fā)策略中是最好的方法。采用一個(gè)進(jìn)度,在未來(lái)的三到四年內(nèi)慢慢地、安全地轉(zhuǎn)移你對(duì)低級(jí)的COM和Win32 APIs的依賴。2. .NET 是COM+的替代
一個(gè)“+”號(hào)帶來(lái)多大的不同。雖然.NET在很大程度上是COM的替代,但它不是COM+的替代——至少現(xiàn)在還不是。這是一個(gè)很容易犯的錯(cuò)誤,因?yàn)镃OM和COM+這兩個(gè)名字很像。雖然COM是一個(gè)組件模型,但COM+是一組以中間件為中心的應(yīng)用程序服務(wù)。實(shí)際上,雖然它們常一起使用,但COM+和COM在很大程度上是相互獨(dú)立的。
COM+服務(wù),如異步的消息(MSMQ)和事務(wù)處理(MTS),構(gòu)成了Microsoft的中間件軟件堆棧的支持功能。這些服務(wù)共同構(gòu)成Microsoft DNA 結(jié)構(gòu)的“應(yīng)用程序服務(wù)器”層——盡管Microsoft并沒(méi)有明確地用那個(gè)術(shù)語(yǔ)。
雖然.NET構(gòu)架、組件模型和分布機(jī)制(裝配)在大多數(shù)情況下代替了COM中同等的概念,但是同在它之前的COM/Win32應(yīng)用程序一樣,. NET應(yīng)用程序仍然運(yùn)用底層的COM+服務(wù)。換句話說(shuō),.NET構(gòu)架沒(méi)有與諸如MTS或MSMQ之類的服務(wù)等同的本地概念。確切的情況是,.NET提供了一組封裝類,作為現(xiàn)有的COM+服務(wù)的適配器。
這就在.NET開(kāi)發(fā)人員中形成了支持派和反對(duì)派兩個(gè)陣營(yíng)。雖然諸如ASP.NET之類的功能增強(qiáng)了.NET的可擴(kuò)展性,但是這種可擴(kuò)展性在很大程度上仍然取決于COM+ 自身的可擴(kuò)展性和穩(wěn)定性。不管怎樣,.NET在可擴(kuò)展性和穩(wěn)定性方面并沒(méi)有帶來(lái)很大的改變。你可以把這一點(diǎn)作為有利于.NET的一個(gè)因素(它的底層框架是經(jīng)受了考驗(yàn)的),或者你也可以把它作為不利于.NET的一個(gè)因素,這取決于你傾向于哪一側(cè)市場(chǎng)陣營(yíng)。業(yè)界人士普遍認(rèn)為Microsoft技術(shù)不斷擴(kuò)大其使用范圍,成為大企業(yè)的解決方案。這種觀點(diǎn)的大部分是沒(méi)有根據(jù)的,或者至少只有部分是正確的,它在很大程度上被競(jìng)爭(zhēng)者們夸大了。但是,COM+ 仍然擔(dān)起了這副重?fù)?dān),而.NET既不排斥這種誤解,也不對(duì)它進(jìn)行補(bǔ)充。
然而,一些主要領(lǐng)域中的早期的成果在表面上是有利于.NET的。例如,我從.NET beta版測(cè)試人員和早期采用者那兒得到的關(guān)于ASP.NET的穩(wěn)定性和速度方面的報(bào)告就是很好的。由于Internet Information Services(IIS)和Active Server Pages(ASP)眾所周知的不足,ASP.NET的引進(jìn)就很快流行起來(lái)(見(jiàn)資源)。許多開(kāi)發(fā)人員已經(jīng)發(fā)現(xiàn)了直接的、強(qiáng)大的理由(如性能和穩(wěn)定性)來(lái)盡快采用.NET構(gòu)架的ASP.NET部分,而且還匯報(bào)了其相對(duì)于ASP的主要的優(yōu)勢(shì)。
但是,總體上說(shuō),在“首先不傷害”現(xiàn)有的COM+底層框架這個(gè)法令下,大多數(shù).NET的功能目前主要集中在生產(chǎn)力、方便開(kāi)發(fā)、一致性等等方面。因此,Microsoft的實(shí)質(zhì)性的R&D力量就主要集中于讓開(kāi)發(fā)人員確信.NET沒(méi)有給現(xiàn)有的COM+結(jié)構(gòu)增加相當(dāng)大的費(fèi)用。但是.NET并沒(méi)有解決當(dāng)前COM+的許多不足。例如,ASP.NET仍然是IIS的擴(kuò)展。這就是說(shuō),所有IIS的不足(安全性、穩(wěn)定性等等)在ASP.NET應(yīng)用程序中仍然存在,就如同它們?cè)贏SP系統(tǒng)中一樣。應(yīng)用程序?qū)右呀?jīng)得到了極大的改進(jìn),但是底層的IIS固疾仍然存在。
你可以期望, Microsoft在2002年努力推動(dòng)向.NET移植后,它下一階段的努力將集中在增強(qiáng)可擴(kuò)展性和性能方面。
3. 所有.NET語(yǔ)言都是平等創(chuàng)建的
.NET構(gòu)架引進(jìn)了很多新的、擴(kuò)展的技術(shù),它們主要針對(duì)各種下一代軟件服務(wù)。在這些新功能中,支持多種語(yǔ)言成為與其它競(jìng)爭(zhēng)平臺(tái)——即Java——明顯不同的一個(gè)功能。與讓開(kāi)發(fā)人員用一種開(kāi)發(fā)語(yǔ)言的Java不同,.NET強(qiáng)調(diào)開(kāi)發(fā)人員可以運(yùn)用他們現(xiàn)有的技術(shù),并把這些技術(shù)延伸到.NET中。
實(shí)際上,Java支持其它編程語(yǔ)言(如Jpython),但它們都沒(méi)有引起人們廣泛的關(guān)注。例如,雖然Python如今是一個(gè)受歡迎的Internet腳本語(yǔ)言,但是Jpython——基于Java的版本——只擁有很小一部分Python用戶。如今,99%的Java應(yīng)用程序都是用Java語(yǔ)言編寫(xiě)的。
另一方面,.NET強(qiáng)調(diào)了其運(yùn)用現(xiàn)有的技術(shù)集合和編程語(yǔ)言的能力,如Visual Basic、Perl、C++、甚至Java。實(shí)際上,許多其它的.NET編譯器已經(jīng)開(kāi)始出現(xiàn)了,從不知名的編譯器(Scheme.NET)到確實(shí)無(wú)名的編譯器(SML.NET)。
不幸的是, 理想的語(yǔ)言“公平競(jìng)爭(zhēng)環(huán)境”只能是種理想。事實(shí)離這種承諾相差很遠(yuǎn)。一些語(yǔ)言比另外一些語(yǔ)言更適合.NET,在.NET中盡量運(yùn)用更多這樣的語(yǔ)言就像努力把一個(gè)正方形的木樁放到一個(gè)圓的洞中一樣。這并不是說(shuō)這種概念沒(méi)有價(jià)值;無(wú)疑它是有價(jià)值的。但是開(kāi)發(fā)人員在實(shí)現(xiàn)這種理想前,他們必須對(duì)這種承諾采取保留態(tài)度。例如,許多編程語(yǔ)言必須被改進(jìn),以使它們符合.NET的普通數(shù)據(jù)類型和運(yùn)行環(huán)境。在一些語(yǔ)言中已經(jīng)做了重大的折衷,如Perl、Smalltalk和其它語(yǔ)言。例如,ActiveState的Visual Perl和Visual Python不生成.NET本地代碼;作為替代,它們將封裝類用于傳統(tǒng)的運(yùn)行環(huán)境。正如Java的宣傳語(yǔ)“一次編寫(xiě),隨處運(yùn)行”一樣,它從來(lái)沒(méi)有把這種市場(chǎng)宣傳變成事實(shí),隨著時(shí)間的推移, 作為“語(yǔ)言公平競(jìng)爭(zhēng)環(huán)境”的.NET將同樣證明,這種說(shuō)法更多是一種市場(chǎng)宣傳,而不是事實(shí)。
事實(shí)就是只有少量的語(yǔ)言可以支配.NET的開(kāi)發(fā)。在Gartner,我們認(rèn)為直到2005年,VB和C# 將支配至少80%的基于.NET的開(kāi)發(fā)。所以,雖然的確你可以將Pascal或COBOL編譯器用于.NET,大多數(shù)開(kāi)發(fā)人員對(duì)此并不關(guān)心。
4. C# 將毀掉 Visual Basic
對(duì).NET編程語(yǔ)言的爭(zhēng)論導(dǎo)致了關(guān)于.NET的最后一個(gè)誤解。許多開(kāi)發(fā)人員認(rèn)為C#將壓倒Visual Basic(也許甚至毀滅它)成為.NET的首選語(yǔ)言。這種觀點(diǎn)的形成有許多因素。正如我在以前的文章中談?wù)摰哪菢,VB.NET不是你的父輩用過(guò)的Visual Basic(見(jiàn)資源)。它對(duì)Visual Basic做了很多改進(jìn),使它充分與.NET平臺(tái)結(jié)合在一起。一些人認(rèn)為從VB6移植到VB.NET大概就相當(dāng)于移植到C#。不要相信他們這種說(shuō)法。
的確,說(shuō)得婉轉(zhuǎn)些,VB.NET和C#都需要開(kāi)發(fā)人員了解底層的.NET構(gòu)架的結(jié)構(gòu)及其重要的學(xué)習(xí)曲線。 這個(gè)學(xué)習(xí)曲線對(duì)于所有的.NET語(yǔ)言都是類似的。然而,這并不是從VB轉(zhuǎn)到C#的一個(gè)強(qiáng)大的理由。實(shí)際上,VB程序員轉(zhuǎn)到C#來(lái)利用.NET構(gòu)架中的功能并沒(méi)有什么強(qiáng)大的技術(shù)原因。
作為C家族的編程語(yǔ)言,C#有一定的優(yōu)勢(shì),所以,對(duì)現(xiàn)在的C、C++和Java開(kāi)發(fā)人員來(lái)說(shuō),C#更吸引人。但是VB.NET,雖然在很多方面都不同于VB6,它仍然保留VB 4GL的語(yǔ)法,并且是擁有全世界50%開(kāi)發(fā)人員市場(chǎng)的一個(gè)編程工具“中心”。在Gartner,我們預(yù)計(jì),從VB6移植到VB.NET將平均花費(fèi)VB程序員約四個(gè)月的時(shí)間(取決于開(kāi)發(fā)人員的情況),而從VB6移植到C#將花費(fèi)約六個(gè)月的時(shí)間。這個(gè)時(shí)間段包括正式的培訓(xùn),以及“實(shí)戰(zhàn)”訓(xùn)練,以便熟練使用新的語(yǔ)言和構(gòu)架。在這兩種情況下,大部分時(shí)間都用來(lái)學(xué)習(xí)新的構(gòu)架。在大多數(shù)情況下,從VB移植到C#只是增加了更多的變量,而沒(méi)有帶來(lái)重大的回報(bào)。
這并不是說(shuō)C#不成功。的確,Gartner公司預(yù)計(jì),當(dāng)Visual C++開(kāi)發(fā)人員采用.NET時(shí),大部分人會(huì)積極地移植到C#。而且,第一次移植到.NET的許多開(kāi)發(fā)人員將選擇這種“本地”.NET編程語(yǔ)言作為他們主要的工具。
.NET 很新:在它今后的幾個(gè)月、幾年內(nèi)的發(fā)展過(guò)程中,你應(yīng)該預(yù)料到會(huì)碰到一些誤解和錯(cuò)誤的設(shè)想。開(kāi)發(fā)人員必須將他們的期望建立在根本的事實(shí)基礎(chǔ)上,在運(yùn)用.NET的“新功能”和運(yùn)用“沒(méi)有被破壞的”現(xiàn)有的COM構(gòu)架和VB語(yǔ)言之間進(jìn)行權(quán)衡對(duì)比。(代碼實(shí)驗(yàn)室) (出處:PConline)