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