觀點:微軟.NET各子技術(shù)領(lǐng)域的應(yīng)用前景
從2002年微軟發(fā)布.NET 1.0,其間歷經(jīng)了8年的發(fā)展,再到.NET 4.0,其已經(jīng)成為一個龐大而復(fù)雜的軟件開發(fā)與運行平臺,架構(gòu)日益復(fù)雜,應(yīng)用領(lǐng)域也在不斷地擴(kuò)展,包容了“一堆”的子技術(shù)領(lǐng)域。
在.NET 4.0即將發(fā)布之際,回顧一下已發(fā)布的各項.NET技術(shù),看看哪些技術(shù)用得很火,哪些被打入冷宮,再猜猜.NET 4.0中可能會有哪些技術(shù)會得到“青睞”,是件有意思的事。
1 桌面應(yīng)用程序開發(fā)技術(shù)(WindowsForm和WPF)
在.NET桌面應(yīng)用程序開發(fā)領(lǐng)域,WindowsForm是“前輩”,相比以前的MFC,其開發(fā)效率高得多,即使比一向以“高效率”著稱的VB、Delphi之類,也不遜色,因此在很長的一段時間內(nèi),WindowsForm成為.NET桌面領(lǐng)域的主流技術(shù),而且有一大批各式各樣的第3方控件,其功能可謂應(yīng)有盡有,使用方便,WindowsForm的問題是“千人一面”,要想做出“與眾不同”的界面,真得費不少力氣。
.NET 3.0中出現(xiàn)的WPF,在界面設(shè)計和用戶體驗上比WindowsForm要強(qiáng)得多,比如其強(qiáng)大的數(shù)據(jù)綁定、動畫、依賴屬性和路由事件機(jī)制,都非常棒。然而,WPF最頭痛的是性能,另外,在需要快速開發(fā)原型的場景,WPF暫時還比不上WindowsForm方便。
.NET 4.0中,WPF在性能上有較大的改進(jìn),這點在使用WPF開發(fā)的Visual Studio 2010上體現(xiàn)極為明顯,Visual Studio 2010 CTP和Beta1只能用“慘不忍睹”一詞來形容,Beta2就有一個性能上的飛越,但還時不時地玩點“崩潰”、“掛死”的把戲,而當(dāng)前的RC版本,我覺得其使用體驗已經(jīng)超越了Visual Studio 2008,我認(rèn)為,WPF取代WindowsForm是必然的。
2 數(shù)據(jù)存取技術(shù)
(1)ADO.NET。這不用多說了,在實際開發(fā)中用得太多了,事實證明了它的成功。
(2)LINQ。
這也是個很大的領(lǐng)域,里面最牛的是LINQ To Object,我一用就喜歡上了,LINQ To XML也很好,它把程序員從代碼中解放出來,可以完成大部分XML存取功能,讓大家很高興有機(jī)會能和原先.NET所提供的“一堆”XML相關(guān)類說聲“不見”,LINQ To DataSet。作為一個ADO.NET技術(shù)的補(bǔ)充,這是一個無足輕重的小卒子,在開發(fā)中可以用,也可以直接忽略。
LINQ To SQL和ADO.NET實體框架。這兩個技術(shù)功能重疊,基本上讓人懷疑其中有一個是不是“沒有存在的必要”,所以曾有“LINQ To SQL已死”的傳言。當(dāng)然,后來微軟公司表態(tài)說仍然會繼續(xù)開發(fā)LINQ To SQL的后續(xù)版本,爭論平息。
但我個人覺得,在實際開發(fā)中還是使用ADO.NET實體框架更合適。LINQ To SQL有的功能它都有,而且用起來更為靈活,難得的是它的使用并不比LINQ To SQL復(fù)雜多少,ADO.NET實體框架還延伸到了其它的技術(shù)領(lǐng)域,是一項重要的基礎(chǔ)數(shù)據(jù)存取技術(shù)。
因此,ADO.NET實體框架VS LINQ To SQL,前者勝出。
(3)WCF Data Service。
這是一項非常值得關(guān)注的技術(shù),原先叫ADO.NET DataService,它體現(xiàn)了“數(shù)據(jù)是一種服務(wù)”的思想,讓數(shù)據(jù)可以通過HTTP請求直接獲取,它設(shè)計了一套URI模式,可以完成投影、選擇、分頁等功能,用起來方便靈活,我覺得在SOA大行于世的分布式系統(tǒng)時代,WCF Data Service應(yīng)該會得到應(yīng)用。
但這一技術(shù)問題在于性能,由于數(shù)據(jù)需要走互聯(lián)網(wǎng),所以如果網(wǎng)速很慢的話,基于此技術(shù)搭建的應(yīng)用程序其用戶體驗將“慘不忍睹”。而且,互聯(lián)網(wǎng)服務(wù)安全問題非常關(guān)鍵,保證基于WCF Data Service技術(shù)搭建的應(yīng)用程序數(shù)據(jù)安全,想必將成為開發(fā)者最費腦筋的地方。
(4)WCF RIA Service。
這個技術(shù)與Silverlight密不可分。我還沒有系統(tǒng)地了解這一技術(shù)領(lǐng)域,不予評說。 #p#
3 Web開發(fā)技術(shù)
這一領(lǐng)域,沒說的,ASP.NET中的WebForm是當(dāng)之無愧的主流。經(jīng)過多年的發(fā)展,WebForm已高度成熟。Visual Studio 2008中加入的Ajax系列組件,如ScriptManger、UpdataPanel之類,再配合一堆的應(yīng)用了Ajax技術(shù)的控件,讓W(xué)ebForm更是如虎添翼。基于這種成熟技術(shù)開發(fā)Web網(wǎng)站,不管是用戶還是開發(fā)企業(yè),都比較放心,而且從.NET 3.5 SP1開始,Web領(lǐng)域多了些新東西。
(1)ASP.NET MVC,MVC這一設(shè)計模式已有多年的歷史,也有很多的成熟的框架,但在.NET“官方”平臺上,卻是個新加入的“成員”,并不算成熟,我覺得其應(yīng)用前景要看看再說。我不知道業(yè)界是否已有基于此技術(shù)開發(fā)的實際項目,有這方面項目經(jīng)驗的朋友,不妨談?wù)勛约旱目捶ā?/p>
(2)ASP.NET DynamicData,這是一個看上去很酷的技術(shù)。當(dāng)使用它來創(chuàng)建網(wǎng)站時,Visual Studio 2010會幫你創(chuàng)建一個DynamicData文件夾,里面放了數(shù)十個模板文件,構(gòu)建了一個網(wǎng)站的“腳手架”,幾乎不用編碼,就可以生成一個全功能的“CRUD”數(shù)據(jù)驅(qū)動網(wǎng)站。
它的設(shè)計思想很好:底層使用ADO.NET實體框架或LINQ To SQL構(gòu)造數(shù)據(jù)模型,通過提取數(shù)據(jù)模型中的元數(shù)據(jù),動態(tài)選擇合適的模板生成網(wǎng)頁。這就避免了真實項目中不得不為每個數(shù)據(jù)存取任務(wù)設(shè)計不同網(wǎng)頁的負(fù)擔(dān),而且這一技術(shù)提供了很多的方式去允許你定制網(wǎng)站。
我當(dāng)初剛一接觸時,也很興奮,這是個好東西啊!但后來我改變了看法,這一技術(shù)的問題在于它過于“自動化”了,而且需要包容數(shù)十個文件,讓其與現(xiàn)有的ASP.NET網(wǎng)站集成相當(dāng)不便,配置起來麻煩。
我個人認(rèn)為,在現(xiàn)有.NET Web開發(fā)技術(shù)應(yīng)用現(xiàn)狀之下,任何一個與現(xiàn)有的ASP.NET網(wǎng)站(以WebForm+Ajax為主體技術(shù))集成麻煩的技術(shù),都很難有“美好”的前途。很不幸,ASP.NET DynamicData是這樣的例子,ASP.NET MVC也有同樣的問題,但沒有ASP.NET DynamicData嚴(yán)重,而且ASP.NET MVC架構(gòu)清晰,還是比較易于維護(hù)。
(3)Silverlight。這實際上是另一種Web應(yīng)用架構(gòu)的代表技術(shù),其立足點在于充分利用客戶端的計算資源,可以大大地降低對服務(wù)端的依賴,而且易于構(gòu)造良好的用戶體驗,我個人認(rèn)為其發(fā)展大有可觀。是一個需要重點關(guān)注的技術(shù)。
4 插件技術(shù)
.NET 4.0引入了一個“ManagedExtensibilityFramework(MEF)”,MEF通過簡單地給代碼附加“[Import]”和“[Export]”標(biāo)記,我們就可以清晰地表明組件之間的“服務(wù)消費”與“服務(wù)提供”關(guān)系,MEF在底層使用反射動態(tài)地完成組件識別、裝配工作。從而使得開發(fā)基于插件架構(gòu)的應(yīng)用系統(tǒng)變得簡單。
另外,請忘記.NET 3.5所引入的“MAF(ManagedAdd-inFramework)”吧,MAF引入了一個復(fù)雜的宿主與插件間的通訊管道架構(gòu),僅僅是創(chuàng)建一個最簡單的SayHello宿主和插件,你也必須創(chuàng)建多達(dá)8個項目!
最要命的是MAF設(shè)計者“想”得過多,設(shè)計了復(fù)雜的接口和類繼承體系,而且選擇讓插件運行于與宿主不同的應(yīng)用程序域中,這就使得插件與宿主之間的通訊變得復(fù)雜。個人認(rèn)為,這些實在不是一個好的設(shè)計決策,而且我估計,MAF會“無疾而終”。
5 WCF和.NETRemoting
其實這是一個不需要討論的問題,有了WCF,我還要Remoting干什么?因為前者包容后者的所有功能,而且還提供了更多,WCF的問題是微軟企圖用一個框架解決所有的問題,因此其架構(gòu)非常復(fù)雜,任何一名想探究其底層運行機(jī)理的人,都必須要有足夠的心理準(zhǔn)備和耐心。
我們可以看到WCF向其它領(lǐng)域的滲透,比如前面的WCFDataService,還有Work Flow Service(將工作流發(fā)布為WCF服務(wù)),看來微軟是將“寶”押在WCF上了,凡是帶有“服務(wù)”字樣的,微軟都有把它改造為WCF服務(wù)的沖動,因此,WCF是不得不學(xué)習(xí)和掌握的技術(shù)。
6 多線程與并行計算
關(guān)于并行計算,在多核時代,我認(rèn)為.NET并行計算中的任務(wù)并行庫和并行LINQ,會得到較多的應(yīng)用。
7 工作流
這個技術(shù),我看是微軟自己把事弄砸了。工作流從.NET 3.0開始引入,到.NET 3.5已經(jīng)比較完善了,也有了一些實際的應(yīng)用。但.NET 4.0就來了個另起爐灶,WF4與WF3.5相比,簡直是另一個產(chǎn)品,而且WF4的Beta1和Beta2相比,居然在對象模型上也有大的改動,RC版本中的WF4我還沒看,不知又有什么變動,應(yīng)該不會再變了吧!
8 函數(shù)式編程語言F#
函數(shù)式編程很有趣,Visual Studio 2010中F#成為.NET正式成員。F#中的許多特性,比如不可更改(immutable)的數(shù)據(jù)結(jié)構(gòu),聲明性編程風(fēng)格,強(qiáng)大的類型推斷,所有東西都是表達(dá)式等,都讓習(xí)慣了面向?qū)ο箫L(fēng)格的程序員感到新奇。
我個人覺得,F(xiàn)#如果用于開發(fā)多線程并行計算程序,會有較高的開發(fā)效率,而函數(shù)式編程的特點,也會使它在科學(xué)計算中有較好的表現(xiàn)。但用于開發(fā)CRUD之類的MIS系統(tǒng),至少目前還是免談吧。
9 云計算
Visual Studio 2010集成了云計算開發(fā)的項目模板,而且云計算是一個說不完的話題。微軟在這方面投入巨大,它精心打造了Azure這個云計算平臺。
雖然我個人認(rèn)可云計算是一個大的發(fā)展方向,但對于中國,這個技術(shù)是一道遠(yuǎn)方的亮麗風(fēng)景,僅供觀賞。因為國內(nèi)還沒有一個成熟的云計算平臺,而微軟的Azure目前又沒有開放中國大陸的云計算購買服務(wù),加上中國又有特殊的國情,所以一切都只是空中樓閣,云計算真正應(yīng)用于國內(nèi),諸位請繼續(xù)等待吧。
本文來自金旭亮的博客,
原文地址:http://blog.csdn.net/bitfan/archive/2010/03/03/5341985.aspx
【編輯推薦】
- 深入.NET Framework 4.0 關(guān)于Lazy的點滴
- 實例講解.NET字符串拘留池
- ASP.NET MVC并不僅僅只是LINQ To SQL
- 專家暢談ASP.NET與PHP的未來
- ***次親密接觸.NET 4.0中的工作流