文章出處

在前面的上、中篇中,我們已經可以看到園子里朋友的點評“后山見! WPF就比winform好! 激情對決”。看到大家熱情洋溢的點評,做技術的我也很受感動。老實說,如何在本文收筆--WPF系列文章,我很緊張;我希望大家閱讀完本系列文章后:各取所取、盡興而歸。 坦白的說,葡萄城作為一家專注.NET技術的公司(僅海外分公司之一的西安葡萄城已經成立26年),我們幾乎走遍了微軟的技術路線,無論從技術前瞻性、或是技術深度均有涉獵。 我們做控件的,也是非常想知道WPF未來走勢如何。

但抱歉的是,我無法預測未來WPF會怎么樣:

WPF to die? or not to die!

 

我只能在本篇收尾披露葡萄城Spread Studio系列產品技術研發路線,與大家共勉:53c4f589xaec41de93feb&690

you can't connect the dots looking forward;

you can only connect them looking backwards.

---------摘錄一段喬布斯在哈佛大學的演講詞。

 

 

 

有理由安心​​

在前面的2篇中你肯定認為我在“黑”微軟,而事實上這確實是在“黑”微軟。但是事物都有兩面性,“黑”完了,也得夸一下,再就是給大家分享一些微軟積極和改進的WPF地方,咱繼續……

仍是活躍的團隊

根據Greg Levenhagen的文章信息(WPF已死?——不,沒死)得出目前仍然有一個開發團隊專注在WPF的開發工作上;但Greg沒有確切的說明具體數字,因此不能明確的衡量這個團隊的作用。
但是很明顯的一點是:微軟沒有放棄這一項億萬人使用的技術,仍然有專職開發團隊而不是合并到其他團隊里。這已經是一個好消息了。
另外從Greg的信息里得出,這個團隊不僅是在維護已有的版本,同時還在積極準備著手下一個版本的開發工作(會是WPF5嗎?)。當然在沒有給這個版本的變更說明的情況下,我們很難保持樂觀,因為很可能它只是一個漏洞修復和性能調整,沒有主要功能。

仍在開發​中(2014-11月更新)

在2014年11月WPF團隊發布了一篇新的文章——WPF路線圖(The Roadmap for WPF)​,表明WPF仍在進行開發。該團隊的工作重點是修復主要的問題,比如性能,這個從WPF一開始就帶著并已持續修復增強的問題點,另外還有和Visual Studio開發套件深度集成等等點。
或許另一個更重要的是完全支持觸摸設備和高分辨率設備,表明微軟聽到了社區的聲音并采取了相關的措施。

新版本的工具​​

我注意到另一個在官方工具這邊的正面的信號,Prism,這個由一些列工具和開發XAML程序的最佳實踐組成的產品,隨著WinRT的版本升級也已更新到版本5.0,同時也是為WPF提供的一個新版本。
正如第一部分前文所說,官方的WPF Toolkit已經停了,而另一個項目接過了接力棒,它就是Externded WPF Toolkit,一個由著名的第三方擴展提供商Xceed開發的項目。因此,從一個WPF開發專家(同理可以是其他的Windows技術)角度來看,這是一個由一系列控件組成的內容豐富的合集,更重要的是它還在開發著,最新的更新是2014年7月,也就是寫本文的三個月前的事。
最后還有兩個上層MVVM框架庫,MVVM Light ToolkitCaliburn.Micro​,也是活著的,最新版大約三個月左右。
因此WPF的工具生態系統還是活著的,并持續演進進化著,對于企業來說這太令人欣慰了,因為不會留下一堆不可維護的項目而發愁了

管理層的改變

在2012年末,當時的Window部門的總裁Steven Sinofsky離開微軟。為什么說這是給WPF的一個正面信號呢?因為Steven Sinofsky是一個徹底的.NET反對派,并且和其他團隊搞不好關系(或許這是他離職的主要原因)。這也可以片面的反映出為,并非由于一些技術原因,導致.NET技術沒有在下一代Window中作為基礎存在,雖然這個微軟創立的技術業已軟件開發的重要部分之一。從外部來看,很難評估出在Window 8+中Steven Sinofsky的真實感受和在設計決定中所起的影響。

 

操作系統市場​​保守性

另一個WPF的有利消息是,事實上無論公司和個人都不會立即遷移到最新的操作系統,其中有一堆的理由:比如太花錢,比如太費時間,比如風險太大。
實際上遷移到最新的系統確實是一件令人望而卻步的過程,因為需要保持應用程序的兼容性:這包括那些外部供應的,譬如微軟辦公套件,還有一些內部團隊開發的部分。從我個人經驗來看,這些軟件的構建,會輕輕松松耗掉兩年多時間。
當前(2014年中)在PC市場份額中的WinRT所占比例顯得特別落魄:

  • Windows 8 + 8.1 : ~15%
  • Windows 7 : ~55%
  • Windows Vista : ~5%
  • Windows XP : ~25%

      因此PC市場超過80%的設備不能使用WinRT,除了WPF之外別無他選。另外在某些領域對于Window 8+來說更糟:在我所知的法國公司里,財務這一塊對其采用率是零,幾乎所有的都沒有完成向Windows 7的遷移,甚至其中我所知道的不少仍使用Windows XP,因為安裝應用對他們來說不是問題。


考慮這個更新換代過程將大約有五年時間,在此期間,WPF將是大量應用的唯一選擇

應用程序生命周期保守性​

你應該知道要遷移一個應用是很費事的:首先你得參與一些列會議并學習對業務的影響,還得在合適的時機努力的把各種“可控的風險”擺到臺面上,然后通過新的應用一一搞定,同時還得保證不能有反復。通常在完成完整的切換過程之前還得保證新的和老的應用能同時工作;更甚你還得呼叫數據庫團隊來遷移數據,網絡團隊來更新防火墻規則……
這就是為什么企業應用程序直到有合理的業務原因才會做遷移的原因,而新技術不是問題,因此,很多現有的WPF程序會停在這里,這意味著WPF技能在可以預見的將來仍然有需求,你只需要看看大量現有的和新開始的WinForm應用程序就可以明白,雖然WPF從2006年就開始替代它。

從技術角度來看,WPF和WinRT是很相似的,但是不完全兼容:仍然有很多的功能在WinRT 8.1中沒有或者不同,譬如在WPF中可以使用clr-namespace去映射一個命名空間到XAML中,到WinRT中,這就是XAML兼容問題,讓人感覺如履薄冰。

WPF​​​很成熟

​很明顯WPF的開發支出顯著下降,這看起來值得擔心。

但是據我的經驗看來,每一個開發人員都有類似的經歷:第一版開發工作量巨大,后續的發布就會從社區反饋獲得好處,最后只需要很小的維護工作。
這確實是WPF自第一次發布(WPF 3.0(我個人看到的更早的Beta)和WPF 3.5)以來為windows應用程序開發指明的路線;然后WPF 4.0又從工具包(WPF Toolkit)里移過來一些控件,像DataGrid,同時做性能提升,到最后WPF 4.5引入了Ribbon同時依然做性能提升。
成熟的技術只需要更少的開發支出,經過八年時間,WPF已經很成熟,其新功能和bug修復都已經大大減少。到如今WPF可以說已經進入維護狀態,在它的生命周期里,已經不需要“奮發圖強”式的做增強開發了。

業務線生態

如果說在某個領域WPF做得很好并一直閃耀的,那一定是業務線(Line Of Business)應用。
首先大部分專家都是基于.NET做開發,因為它是一個成熟的平臺,同時很多公司在Windows平臺上開發他們的業務線應用,這些肯定不會被拋棄,而是盡可能的被重用。
還有很多以.NET為中心的工具在WinRT下不可用,例如,對象關系映射(ORMs)中得NHibernate或者Entity Framework,而這些恰恰業務線應用訪問關系數據必不可少的組件。
其次,一些大型的業務線應用像交易平臺,根本不能從WinRT平臺獲得好處,因為根本就不需要,甚至限于安全性和移動性,壓根就不想要。因此像這一類大型應用一度反對微軟WinRT應用的設計規范和指導:他們只想在屏幕上顯示最小集合的數據!

學習曲線​

如果你是一個經驗豐富的WPF開發人員,可以說超過80%不需要再學習就已經是WinRT開發人員了,如果你是業務專家,那么80%的經驗可以直接應用到WinRT程序中。


原因就是用來開發WPF應用的大部分基礎工具和WinRT是一樣的:

    • 一樣的編程語言:C#,VB.Net……
    • 一樣的標記語言:XAML
    • 一樣的方式關聯視圖和數據:數據綁定(Data binding),數據模版(DataTemplates)……
    • 一樣的設計模式和實現:MVVM,INotifyPropertyChanged, INotifyCollectionChanged, ICommand……

因此你在其他基于XAML平臺比如WPF和Silverlight的投資可以延續到WinRT上,并縮減學習曲線的陡峭度(還記得當初還是一個學習WPF的新手嗎?)

WPF內容豐富​​

WinRT不是一個WPF的克隆,其中很多的功能都沒有實現,因此如果你只是開發桌面應用程序,從技術能力來說WPF是一個更好的選擇。但是我把它放在最后一條,因為就我個人而言,我覺得這并不非常重要,WinRT還一直在向前演進,它們之間的差距將會越來越小,但是我仍然猜想一些開發人員不想在WinRT上開發,而是想要WPF。
再次說明WinRT的附加值不是在其本質上得技術增強,而是在開發模型上提供了移動平臺開發能力和部署到微軟商店的能力。

​未來戰略​

無論你是企業開發還是個人開發,你都應該考慮減緩對WPF的技術投資,轉而培養在WinRT方面的專長。

業務

在業務方面,因為有一些老版本的Windows,包括Windows 7,所以肯定不能停止你的WPF開發工作。對于那些已經存在的應用​,也不用擔心,沒有必要要遷移到WinRT,除非你想要獲得新的能力或者和微軟商店兼容。可以預見不久的將來微軟會對WPF做支持的,對于微軟來說,向后兼容是一件很重要的事情。舉例來說,雖然已經很難在最新的Windows里建立VB6的環境,但是你仍然可以做到,因此你的應用包括安裝都會一直能平滑的工作。
根據你的可用的工時,你應該把時間專注到技術潛力上,同時讓一些開發人員開始認真的考慮一下WinRT:如何從中獲得好處,尤其是在開拓用戶方面;新的應用將如何開發;如何重利用已有的工具和代碼;什么是要關注的潛在問題……
做一個應用,要想從為手機和平板設計的WinRT中得到好處,得需要先制定好遷移路線,很明顯的原因就是WinRT中缺失了很多WPF種的許多功能。從概念設計開始就應該驗證新技術在你的情景中適用度。

開發​

作為一個開發,我們不希望我們的技術技能是沒人要的,而是建立足夠強大的技能組合體以滿足更多的業務和項目,以此降低被技術拋在后面的風險。因此,作為一個經驗豐富的WPF開發人員,就我個人經驗,你應該在選擇繼續強化你的WPF技能或者轉向獲得WinRT開發技能之間選擇后者。
或者你可以繼續在WPF領域等待直到市面上稀缺WPF開發,就像如今的COBAL和VB6這類老技術一樣,但是我估計還得等十年。因為隨著IT業的發展,任何技術在市場上都會有很多的開發人員,尤其是像WPF這樣的主流技術,所以我是不指望這個。
但是也不必面對第n個冒出的新技術而從此意志消沉,這就是我們這個行業的商業模型:它需要無時無刻的創造新事物(還記得SOA為各大IT公司,他們的雇員、股東和承包商賺了大筆大筆的銀子嗎)來賣給客戶,就像蘋果公司(Apple)的iPhone系列,從iPhone 1,2,3……到如今已經6了,估計不久將來就42啦,但這就是它的工作模式。慶幸的是作為開發商的我們,在眾多的壁壘上有我們的優勢,我們輕松以此為生,客觀的說,這些新技術豐富了企業和個人的生活。

結論​​​

綜上所述,我認為這些事實是很清楚的:WPF過去輝煌過,如今還在用,在不久的將來會和WinRT會直接競爭,但是當WinRT獲得更多投入和足夠的市場份額之后,WPF就會像如今的VB6和WinForm一樣被棄用。
重要的是我們不可否認,有些事情肯定會發生,不可避免的在腦子里產生悲觀情緒。不要指望WPF還會復興,在IT界肯定不會發生(當然了,COM可以說是借著WinRT之體復出),客觀上講,WPF沒有在趨勢和新事物上做任何量身定制的亮點。
當然,前途不是一片灰暗,WPF不是已經消亡和過時,或者正在死亡和棄用,它只是剛剛達到頂峰,當企業基礎架構遷移到Windows 8+之后,未來的開發就會選擇WinRT,那是WPF就會慢慢淡出。
請保持務實和透明:在WPF能給你的客戶帶來價值的時候使用它,但是得透露出相關因素,并幫助他們為將來做好準備。我已經在我的WPF培訓的教材中交叉串入一些WinRT的內容,包含了一些簡要總結來闡述這些事情,并根據它們的重要性將它們一一突出。
但是就我個人而言,我覺得也不應該在WinRT做過多的投入,為什么呢?因為隨著對WinRT攝入越來越多,我感覺好處正在一點一點減少:

  • ​​如果你是一個業務線應用,你的唯一目標是Windows桌面,同時還得兼容Windows 8之前的系統,至少Windows 7,因從WinRT顯然不是一個選項,你還得用WPF;
  • 如果你面向平板和手機,請不要忘記,市場上得90%以上的份額是iOS和Android,所以WinRT壓根就不是問題,此時你該選擇使用網頁技術(Javascript/HTML/CSS)或者像Xamarin(C#)或者QT(C++)這樣的本地跨平臺框架,就是說,大部分場景WinRT毫無用武之地。此外,應該知道微軟正投入巨資在研究后續技術,此時提問是否WinRT已死還為時尚早,但是如果試圖把WinRT作為主流的開發平臺,我肯定會大吃一驚。

在我看來,WinRT是一個僅適用微軟內部使用的良好平臺,因為它可以很好的在不同的Windows系統層面上做代碼共享,模仿蘋果(Apple)的工作模式;但是對于最終開發人員來說,WinRT是一個非常有限的方式:在PC、平板和手機間共享代碼但卻只適用于Windows系列設備。或許很多業務其實只需要其中一個,但是我仍懷疑這一點,因為如今的應用通常是由員工個人提供設備(BYOD)​,它可以是任意設備,很大可能是iOS或者Android。

[完。]

 

完整系列文章目錄:

---------------------------------------------------------------------------------------------------------------------------------

 

附錄一:葡萄城技術棧路線圖

 

image

 

    • 1993年介入微軟MS-BASIC技術
    • 2002年介入微軟.Net Framework技術

 

附錄二:葡萄城Spread Studio產品技術路線圖

 

image

2014年Spread Studio有4個技術分支:WPF、Winform、ASP.NET、JavaScript(HTML5)

 

附錄三:葡萄城產品支持觸摸設備和高分辨率設備

image

 

葡萄城WPF技術相關產品鏈接:

 

相關閱讀:

是什么讓C#成為最值得學習的編程語言

從Visual Studio看微軟20年技術變遷

C#開發人員應該知道的13件事情

Visual Studio 2017正式版發布全紀錄

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜

    大師兄 發表在 痞客邦 留言(0) 人氣()