微軟曾經(jīng)對WPF(代號Avalon)抱很大的期望——新一代的華麗用戶界面平臺,一統(tǒng)Web應(yīng)用和桌面應(yīng)用,F(xiàn)lash殺手,盡管微軟口頭上不承認(rèn)。幾年下來,WPF確實實現(xiàn)了當(dāng)初的預(yù)期的大部分功能,但離稱霸軟件開發(fā)領(lǐng)域還有不小的距離。不過,剛轉(zhuǎn)到 WinForm上一兩年的開發(fā)人員們都很困惑,WinForm究竟還有沒有未來。微軟只是模糊地說短期內(nèi)還是WinForm,長期是WPF。想想“維納斯”,“TabletPC”,“Hailstorm”,“IE Channels”等等就知道這位老大的話不能全信。到底何去何從就仁者見仁智者見智了。 英文開發(fā)社區(qū)內(nèi)有句流行的話,叫“No silver bullet”,就是說沒有萬能,沒有一個工具或方法能完美地解決所有的問題。同樣這對WPF也適用。與其說WPF是WinForm的替代品,它更像DHTML和ASP.NET??鋸堃稽c說,如果要給微軟的技術(shù)畫個家譜的話,DHTML就是WPF的直系親屬。WPF里的大量核心概念和結(jié)構(gòu),如屬性引擎、事件模型等,都是繼承自 DHTML,最大的一個不同是外觀和控件邏輯的分離。WPF應(yīng)用和DHTML應(yīng)用(HTA)的相似性也非常大,不同點是WPF應(yīng)用可以完全脫離IE。也就是說,WPF和網(wǎng)頁、ASP.NET、SVG是一套體系,可以比作XML版的Flash,而和WinForm完全不同。WPF的長項應(yīng)該是網(wǎng)頁式應(yīng)用,當(dāng)然它也可以用來做別的東西,就像Ajax可以做在線文本編輯器一樣。 也許有人還沒聽說過DHTML。DHTML即Dynamic HTML,是微軟在90年代末在IE4里支持的擴(kuò)展了的HTML,主要特征就是可以動態(tài)修改網(wǎng)頁上對象的屬性,而且具有類似Flash里的時間線,可以做動態(tài)的網(wǎng)頁。缺點是難于開發(fā)和調(diào)試。后來主要被用來做翻轉(zhuǎn)按鈕。DHTML的一個頁面集合和腳本資源一起可以打包成HTA應(yīng)用,HTA應(yīng)用可以在本機(jī)以及網(wǎng)絡(luò)上使用。但從現(xiàn)在還有多少人記得DHTML就知道這東西沒成才。 回到WPF,WPF只在XP和Vista上有完整的支持,在其他平臺和瀏覽器下,微軟提供了WPF/E(開發(fā)代號)。WPF/E的程序是非編譯的,就是說是發(fā)布源碼的,和HTML加JavaScript一樣。另外WPF/E目前只支持JavaScript。那么,WPF/E能用來做什么應(yīng)用大家也就心里明白了。要在WPF/E和Flash間選擇的話,只要想想XML和壓縮的二進(jìn)制文件的區(qū)別就行了,現(xiàn)在幾兆的Flash比比皆是,改用XML格式的話會有多大,諸位心里明白。不過要是個網(wǎng)頁Form應(yīng)用的話,WPF/E確實比Flash更強(qiáng)一些,不過有Ajax在,殺雞未必要用牛刀。如果你的應(yīng)用只支持XP 和Vista,那么你可以得到WPF的全部優(yōu)勢。 WPF有三種應(yīng)用模式:應(yīng)用、瀏覽應(yīng)用、文檔應(yīng)用。應(yīng)用就是一般的窗口應(yīng)用,瀏覽應(yīng)用就是象網(wǎng)頁一樣的一頁一頁的應(yīng)用,文檔應(yīng)用是用來顯示內(nèi)容的瀏覽應(yīng)用功能子集,而不是MVC模型。一般應(yīng)用其實也就是每個頁面擁有一個獨立的窗口。估計VB用戶想到了當(dāng)年的html控件,Delphi用戶想到了 IntraWeb。簡單的理解就是把WinForm界面換成了網(wǎng)頁,當(dāng)然這個網(wǎng)頁的功能比HTML強(qiáng)得多,也復(fù)雜得多。 WPF是一套很復(fù)雜的體系,它的界面可以用代碼生成,不過絕大多數(shù)人都會用XAML來生成。XAML可以認(rèn)為是WPF的HTML。制定標(biāo)準(zhǔn)的人總是說 XML是可讀的,但多數(shù)人認(rèn)為它是用來給機(jī)器讀的。XMAL基于XML,同時做了相當(dāng)?shù)臄U(kuò)展以彌補(bǔ)功能的不足。要手寫XAML,必須了解WPF,了解 XML(namespace,link等等),了解XAML的規(guī)則,了解XAML擴(kuò)展的語法,能夠記住大量的標(biāo)識符和引用關(guān)系。就像今天人們大多不再手寫 HTML一樣,人們大多不會愿意去手寫更復(fù)雜的XAML。而且按照微軟的設(shè)計目標(biāo),WPF要將界面設(shè)計和程序邏輯分開,交給不同的專業(yè)人員去做。也就是說,界面的設(shè)計是要交給美工的。相信我,找一個能夠手寫XAML的美工很難。微軟為此提供了Expression系列軟件,當(dāng)然不是免費的。當(dāng)然 VisualStudio里也有一定程度的支持,但這意味著由程序員來做靈活復(fù)雜的界面,更容易做出丑陋的界面;或者讓美工來用 VisualStudio,功能有限而且有點昂貴。當(dāng)然也可能有個不錯的UI程序員,兩全其美;或者老老實實地做簡單樸素的界面,以后有機(jī)會再找美工潤色。 程序員都喜歡談?wù)撍俣?。WPF是可以硬件加速的,在DirectX 9級顯卡和安裝了較新的驅(qū)動的情況下,WPF會得到部分或完全的硬件加速。WinForm是基于GDI+的,沒有硬件加速,只有v2.0里的非兼容模式下的文本是通過GDI加速的。所以,長遠(yuǎn)來說,WPF有更好的性能。 那么現(xiàn)在回到最初的問題,WPF和WinForm,賭注該壓哪一邊。編輯器類程序是難以移植到WPF的,如World、Excel、 PowerPoint、Photoshop、IDE等。顯示類和一般的商務(wù)類應(yīng)用都是可以移植的,現(xiàn)有的Web應(yīng)用都是可移植的。也就是說,WPF的應(yīng)用范圍和Ajax、Flash是有很大重合的,WPF的競爭力就是在和代碼的集成上。隨著Adobe加緊升級Flash的應(yīng)用功能,一種可能的結(jié)果是WPF 和Flash壓縮了Ajax的生存空間,WPF/E沒有獲得足夠的支持,WPF成為Windows專用的應(yīng)用,F(xiàn)lash作為跨平臺方案存在。而對 WinForm程序來講,嵌入一些WPF內(nèi)容是容易的。在WPF前途未卜的情況下,WinForm仍然是目前一般應(yīng)用最穩(wěn)妥的途徑。
對比MFC ,Winform ,WPF winform 封裝了 win32 的api,多次進(jìn)行P/invoke 操作 (大部分使用p/invoke操作封裝),速度慢。 wpf是一種新的模型,不再使用win32 模型,自己新建模型,使用dx 作為新的顯示技術(shù),直接訪問驅(qū)動程序,加快了運(yùn)行速度,可是,這種模型,需要支持dx 9 的顯卡,硬件要求高(你還能找到現(xiàn)代機(jī)器不支持dx9 的嗎?) 開發(fā)效率上,MFC <WPF <winform 盡管MFC開發(fā)界面執(zhí)行效率高但是開發(fā)效率低,作為現(xiàn)在的項目開發(fā)來說時間跟開發(fā)效率往往能決定項目的成敗,所以除非有特別的需求,否則都回盡量避免用mfc來做開發(fā),MFC只是一個弱封裝器。 開發(fā)成本,MFC〉wpf〉winform 用MFC開發(fā)成本太高,對開發(fā)者能力要求更高,作為客服當(dāng)然希望開發(fā)的費用越少越好,開發(fā)者當(dāng)然希望錢賺得越多越好,這樣一比,這也是MFC沒落的一個很大的原因。 界面執(zhí)行效率上,MFC==WPF〉winform 隨著計算機(jī)硬件的性能提高,多核cpu的普及,它們的差距會越來越小。 開發(fā)靈活性上:wpf〉MFC〉winform 美觀上:Wpf〉winform〉MFC 這一項中MFC下要開發(fā)出一個華麗的ui極其困難,也許你可以說你可以用控件,但是商業(yè)開發(fā)控件是要收費的!!Wpf很容易就可以做出vista那樣的ui特效。mfc要寫出這種效果不知要寫到何年何月。 內(nèi)存使用上:wpf〉winform〉MFC 隨著計算機(jī)硬件的性能提高wpf這個缺點會被忽略。 使用范圍:wpf〉MFC==winform 有以上可知:WPF 大有取代winform 和MFC之勢,從未來net的發(fā)展來看,MFC以后只會變成一種經(jīng)典,作為一種技術(shù)來供開發(fā)者學(xué)習(xí),winform和WPF兩者會并存發(fā)展,但最終都會被WPF取代,最終實現(xiàn)桌面應(yīng)用程序和瀏覽器應(yīng)用程序的統(tǒng)一。 |
|