朱立
摘 要:移動互聯(lián)網(wǎng)時代,雖然在移動終端市場還看不到微軟多少份額,但微軟的技術(shù)圈子里卻一點(diǎn)也不安靜,各種新技術(shù)、新模式、新應(yīng)用紛至沓來,讓人一時眼花繚亂。該文從C#程序員的視角出發(fā),將微軟技術(shù)體系作了一個淺層的梳理,其間對部分焦點(diǎn)性關(guān)鍵詞略加分析,并結(jié)合近期動態(tài)對dot NET技術(shù)環(huán)境稍作展望。
關(guān)鍵詞:微軟技術(shù)生態(tài)系統(tǒng) ASP.NET MVC MVVM 移動互聯(lián) C#程序員
中圖分類號:G71 文獻(xiàn)標(biāo)識碼:A 文章編號:1674-098X(2015)03(a)-0050-02
自dot Net Framework面世以來,框架支持多種開發(fā)語言的特性一時成為軟件行業(yè)內(nèi)關(guān)注的焦點(diǎn)。然而很快,C#成為了dot Net框架中的不二選擇。在Windows系統(tǒng)環(huán)境下,C#程序員基本上生活在圍繞Win Forms和Web Forms應(yīng)用程序構(gòu)成的技術(shù)生態(tài)系統(tǒng)中。雖然,伴隨C#和Framework的成長,其間有過一些波動,但微軟的Visual Studio IDE(Integrated Development Environment)始終奉行“降低開發(fā)人員工作量”的原則,以提高代碼生成(注意不只是編寫)的效率。所以相比Java程序員來講,C#程序員的生活顯然氣定神閑了許多,算得上平安幸福。然而,移動互聯(lián)時代的到來,一時讓人手足無措,這種幸福生活還能維持多久?
1 移動互聯(lián)網(wǎng)時代
2000年前后,信息化建設(shè)開始起步,經(jīng)過近15年時間的醞釀,大量積累的需求催生了寬帶、物聯(lián)網(wǎng)、云、大數(shù)據(jù)等一系列新概念帶來的新技術(shù)、新模式、新應(yīng)用。3G網(wǎng)形成的沖擊還余波未散,4G、5G網(wǎng)已經(jīng)紛紛粉墨登場。蘋果手機(jī)成為粉絲們瘋狂追捧的時尚品,谷歌以開源的安卓平臺在市場上獨(dú)霸一方,智能手機(jī)以意想不到的速度開始普及。據(jù)2014年6月統(tǒng)計,中國手機(jī)網(wǎng)民的規(guī)模達(dá)到五億二千七百多萬人,占網(wǎng)民比例的83.4%。手機(jī)網(wǎng)上支付和網(wǎng)上購物的年增長率均在160%左右,剛剛過去的2014年“雙十一”,天貓總成交額高達(dá)571億,其中無線成交額達(dá)到243億。智能終端的普及,使得移動商務(wù)無所不在,其發(fā)展頻率超過了摩爾定律的描述……一切的一切都在表明,移動互聯(lián)網(wǎng)時代已經(jīng)到來,手機(jī)已經(jīng)開始超越PC機(jī)成為第一大上網(wǎng)終端。
嗅覺異常靈敏的微軟自然不會放過這樣一個巨大的市場。雖然早期的Windows CE、Windows Mobile沒有在移動互聯(lián)市場蓬勃發(fā)展的黃金時代帶來太多驚喜,繼放棄Windows Phone 7之后,Windows Phone 8也并未收獲預(yù)期的市場份額,但微軟新一代掌門人納德拉一直堅持的“三屏一云”戰(zhàn)略,和近兩年微軟在“云端”的不菲業(yè)績,讓人不能不作這樣一個猜測——微軟在與用戶體驗(yàn)的博弈中似乎醞釀著一場巨大的“陰謀”,一旦雙方達(dá)成妥協(xié),移動互聯(lián)市場不知又將是何格局。
市場風(fēng)起云涌,身處敏感地帶的程序員們必然要經(jīng)歷或大或小的沖擊。軟件公司對C#程序員的相關(guān)崗位劃分,也開始細(xì)化出前端、dot NET開發(fā)、移動開發(fā)、數(shù)據(jù)處理等等,甚至在一些規(guī)模大、業(yè)務(wù)復(fù)雜的項(xiàng)目中,還會把前端細(xì)分成交互、布局……但是,對C#程序員來說,依托微軟這樣一位軟件巨人,看清身處的技術(shù)生態(tài)系統(tǒng),還是能閑庭信步,回復(fù)往日幸福時光的。
2 按架構(gòu)劃分的技術(shù)生態(tài)系統(tǒng)
2.1 ASP.NET
移動互聯(lián)網(wǎng)時代,各類應(yīng)用都在向移動平臺(至少是Web方向)傾斜,曾經(jīng)的Win Forms程序及其技術(shù)架構(gòu)將退居一隅(甚至有最終淡出市場的可能)。ASP.NET(Web Forms程序)將依托Web環(huán)境繼續(xù)存在,C#程序員面對的這一技術(shù)環(huán)境如表1所示。
*.aspx是傳統(tǒng)的微軟動態(tài)網(wǎng)頁格式,其中包含的主要是HTML標(biāo)簽和ASP.NET對象,需要依靠設(shè)計器(Designer)設(shè)計編寫;*.xaml可以用于編寫WPF(Windows Presentation Foundation)、Silverlight、Win 8 Application等,是這些類型程序的典型界面文件格式,主要包含XAML對象元素。以上二者都是UI人員的工作對象,常用工具主要包括微軟的Microsoft Expression設(shè)計套裝,如Expression Web(所見即所得的網(wǎng)站設(shè)計器與HTML編輯器)、Expression Design(點(diǎn)陣與矢量圖像編輯器)、Expression Blend(用于可視化制作WPF及Silverlight、Win 8 Application等應(yīng)用程序的用戶界面)等。
對C#程序員來講,這一環(huán)境中的主要工作文件是*.xaml.cs文件類型,也就是*.xaml文件的代碼隱藏文件,是程序員Coding的地方,主要工具是Microsoft Visual Studio(2012以上版本),與Microsoft Expression代碼兼容。
2.2 ASP.NET MVC和MVVM
近兩年來,微軟在云端的收獲頗豐。在C#程序員眼里,可以把它看作Windows Azure。Windows Azure提供了一個云環(huán)境,雖然帶有容器,可以進(jìn)行小規(guī)模開發(fā),但與本地開發(fā)工具不可同日而語,其應(yīng)用性遠(yuǎn)大于開發(fā)性。
ASP.NET MVC(Model-View-Controller)是微軟官方基于MVC模式編寫ASP.NET Web應(yīng)用程序的框架,同時又是一種特有的Web應(yīng)用軟件架構(gòu)模式和技術(shù),是ASP.NET技術(shù)的子集,以下簡稱MVC。MVVM(Model-View-ViewModel)框架是MVC一個變種,是基于MVP(Model-View-Presenter)模式與WPF相結(jié)合的應(yīng)用方式發(fā)展演變而來的一種新型架構(gòu)。二者的關(guān)系如圖1所示。
MVC主要針對具有人機(jī)交互功能的軟件,特別是基于Windows Azure的應(yīng)用開發(fā),MVC框架的使用更為廣泛。MVC具有敏捷開發(fā)的特點(diǎn),可以快速生成解決方案,適用于電商、社區(qū)、CRM/ERP等大型Web應(yīng)用。MVC還有一個重要優(yōu)勢在于,Model、View、Controller三個組件相互之間是松耦合的關(guān)系,所以可以分別進(jìn)行自動單元測試,大大提高了MVC應(yīng)用程序的可測試性。截止2014年,最新版本是MVC6。從MVC4開始,View的文件類型是*.cshtml(之前是*.aspx),Controller和Model的文件類型都是*.cs,三者通過路由構(gòu)建關(guān)系。
MVVM立足于原有MVP框架,并且把WPF的新特性揉合進(jìn)去,以應(yīng)對客戶日益復(fù)雜的需求變化。WPF的數(shù)據(jù)綁定與Presentation Model相結(jié)合的做法,使得開發(fā)人員可以將View和業(yè)務(wù)邏輯分離出來,這種WPF特有的數(shù)據(jù)綁定技術(shù)簡單實(shí)用,所以稱之為Model-View-ViewModel。VM相當(dāng)于MVC中的Controller。MVVM中的View由一個個Partial View組成(簡稱PV),類似于自定義控件。每個PV與Model都有對應(yīng)關(guān)系,每個PV都有邊界,可以單獨(dú)操作,也可以組成新的View。PV將頁面局部化,PV之間沒有交互。為View量身定制的mode也就是ViewModel,ViewModel包含所有由UI特定的接口和屬性,并由一個ViewModel的View(Partial View)綁定屬性,在獲得二者之間松散耦合的同時強(qiáng)化了整個應(yīng)用程序的松耦合特性。MVVM的主要程序類別有WPF、Silverlight、Windows Phone Application等。MVC、MVVM程序可以部署到云端,MVC與MVVM的Windows Phone Application等程序相結(jié)合,可以實(shí)現(xiàn)面向“云+端”的開發(fā),構(gòu)成了“互聯(lián)網(wǎng)+移動互聯(lián)網(wǎng)”的模型。
基于云環(huán)境的應(yīng)用軟件,業(yè)務(wù)邏輯部署在云端,界面只負(fù)責(zé)美觀,需要用到JavaScript、jQuery、Ajax等技術(shù)。在面向移動互聯(lián)編程中,HTML5+CSS3+JS技術(shù)方案漸成主流。
2.3 ASP.NET與ASP.NET MVC
ASP.NET(Web Forms)是一個開發(fā)框架,通過HTML、CSS、JavaScript 以及服務(wù)器腳本等來構(gòu)建網(wǎng)頁和網(wǎng)站。ASP.NET支持三種開發(fā)模式:Web Pages、MVC以及Web Forms。也就是說,MVC是ASP.NET三個開發(fā)模型之一。
Web Pages主要運(yùn)用*.cshtml文件進(jìn)行開發(fā),界面和業(yè)務(wù)邏輯代碼混排,維護(hù)起來非常不方便。之所以保留這種模式是因?yàn)楹唵?,非常適合做小東西。
Web Forms是從前到后的開發(fā)模式。通常先以硬拷貝的方式定義UI,其中包含業(yè)務(wù)邏輯的成分,也就是所謂的“前”。這樣的UI經(jīng)用戶認(rèn)可后,再交給開發(fā)團(tuán)隊進(jìn)行代碼開發(fā),就是所謂的“后”。界面與后臺代碼是緊耦合的關(guān)系,修改起來不太方便,適合做簡單的Web應(yīng)用程序。這種開發(fā)模式屬于形象思維方式,它的好處是所見即所得,但開發(fā)速度相對較慢。
MVC是從后向前的開發(fā)模式。首先定義程序功能,解決要做什么的問題,并在Controller中實(shí)現(xiàn),要做幾件事就寫幾個Action,這是MVC的“后”。然后可以通過ViewEngine等自動生成技術(shù)(也可以借助母版頁等方式)快速得到UI,也就是MVC的“前”。這種模式屬于抽象思維,支持敏捷開發(fā),所以開發(fā)速度相對快得多,適合做大型Web應(yīng)用。
3 按崗位劃分的技術(shù)生態(tài)系統(tǒng)
3.1 前端工程師
在移動互聯(lián)環(huán)境的Application中,UI已經(jīng)不僅是美工或稱視覺設(shè)計的工作層面,前端工程師崗位已經(jīng)越來越明確地被細(xì)分出來。這一崗位的基本技術(shù)包括HTML5、CSS3和jQuery,在高級階段還要求熟練掌握J(rèn)avaScript,能夠編寫原生的js應(yīng)用。在一些類似BI(Business Intelligence)的復(fù)雜大型項(xiàng)目中,還可能把前端細(xì)分成前端布局(HTML5+CSS3)和前端交互(JavaScript)兩類崗位。同時,前端通常還要求熟悉MVVM模式。
3.2 dot NET工程師
這是一個比較傳統(tǒng)的崗位,要求熟悉ASP.NET MVC 5技術(shù)架構(gòu),在熟練掌握C#語言的同時,精通dot NET Framework 4.5,包括I/O、網(wǎng)絡(luò)、異步、線程、并發(fā)、安全、LINQ、XML、JSON等內(nèi)容,還需熟悉Entity Framework 6。在高級階段,要能夠熟練進(jìn)行Microsoft Office Sharepoint Server基礎(chǔ)開發(fā),同時熟悉掌握各類相關(guān)開源框架,越多越好。
3.3 移動開發(fā)工程師
這一崗位的要求主要針對原生移動應(yīng)用開發(fā),包括Windows Phone、Windows 8開發(fā),還有標(biāo)準(zhǔn)Android開發(fā)和標(biāo)準(zhǔn)iPhone開發(fā)。同時還要具備類似微信標(biāo)準(zhǔn)開發(fā)、數(shù)據(jù)庫支持開發(fā)等方向的標(biāo)準(zhǔn)技能。如果可能,最好掌握一些云技術(shù)運(yùn)用。
4 不遠(yuǎn)的未來
微軟“三屏一云”的戰(zhàn)略描繪道:手機(jī)、平板、PC,甚至還有Xbox運(yùn)行著內(nèi)核一致、界面一致的系統(tǒng)。Windows強(qiáng)調(diào)跨設(shè)備一致性的思想可見一斑。
微軟越過Windows 9,直接把Windows 10帶到用戶面前。在微軟的宣傳中,Windows 10并不是Windows 8.1的一個增量更新,而是一場質(zhì)的變化。微軟正在努力打造一個平臺,一個從小型嵌入式物聯(lián)網(wǎng),到平板、手機(jī)、PC,甚至最終涵蓋Xbox的生態(tài)系統(tǒng)。也就是說,Windows 10將覆蓋所有尺寸和品類的Windows設(shè)備,從微型計算機(jī)(類似英特爾伽利略,適用于物聯(lián)網(wǎng)設(shè)備)、手機(jī)、平板(ARM和x86芯片)、二合一設(shè)備、桌面電腦及服務(wù)器,這些設(shè)備共享一個應(yīng)用商店。如果是這樣,那么開發(fā)者開發(fā)應(yīng)用(Universal Windows Apps)時將會非常容易地進(jìn)行跨平臺遷移,用戶在不同設(shè)備切換后也能保證一致的體驗(yàn)。
2014年11月13日的一則新聞標(biāo)題又一次讓眾人目光聚集微軟——dot NET架構(gòu)開源了。一直為業(yè)內(nèi)人士稱道的集成開發(fā)環(huán)境Visual Studio要正式支持Android和iOS。納德拉說過的“移動為先,云為先”和“找到微軟最初的本質(zhì)”終于要兌現(xiàn)了,微軟開始為Android和iOS陣營的開發(fā)者提供服務(wù),Visual Studio 2015將支持使用C#、C++和HTML/JavaScript編寫Windows、iOS、Android甚至其他平臺的應(yīng)用。
這一切很可能意味著,C#程序員的技術(shù)生態(tài)系統(tǒng)又將發(fā)生一次不小的變革。
參考文獻(xiàn)
[1] 淺談MVP架構(gòu)及開發(fā)模式.