|
在企業(yè)應(yīng)用的前端開發(fā)中,Ajax、Flash和Silverlight爭(zhēng)奇斗艷,各有千秋。這次InfoQ中文站有幸邀請(qǐng)到來自中國人壽的Silverlight專家吳磊先生,為讀者分享他的Silverlight在企業(yè)應(yīng)用開發(fā)中的豐富經(jīng)驗(yàn)。
就在筆者寫下本文的當(dāng)天,第二屆Silverlight Firestarter 發(fā)布會(huì)在美國召開,微軟企業(yè)副總裁 Scott Guthrie 發(fā)布了Silverlight 5 的一系列新特性,并宣布Silverlight 5 將注重豐富的媒體體驗(yàn)與企業(yè)應(yīng)用開發(fā)兩大方面的改進(jìn)。其中針對(duì)媒體方面的改進(jìn)包括GPU硬解碼、H.264等5項(xiàng)功能,而針對(duì)企業(yè)應(yīng)用方面的改進(jìn)包括64位操作系統(tǒng)支持、IE 9硬件加速、向量打印、文本清晰度、調(diào)用非托管代碼等30多項(xiàng)功能,可以看出Silverlight已經(jīng)逐漸將其未來重心轉(zhuǎn)向企業(yè)級(jí)應(yīng)用方面(一直以來,筆者都認(rèn)為Silverlight的強(qiáng)項(xiàng)應(yīng)該是企業(yè)應(yīng)用)。
Silverlight作為微軟三屏一云戰(zhàn)略中展現(xiàn)層的重要技術(shù),越來越引起企業(yè)開發(fā)者的注意。新浪財(cái)經(jīng)、騰訊、淘寶、口碑網(wǎng)等互聯(lián)網(wǎng)企業(yè)已經(jīng)嘗試使用Silverlight開發(fā)交互性較強(qiáng)的商業(yè)應(yīng)用,而一貫謹(jǐn)慎保守的大型金融公司陸續(xù)開始使用Silverlight來提高企業(yè)應(yīng)用的用戶體驗(yàn),比如中國人壽(網(wǎng)上服務(wù)應(yīng)用)、中國人保(商務(wù)智能應(yīng)用)已經(jīng)有相關(guān)應(yīng)用,而像花旗銀行、工商銀行這樣的大型銀行也在嘗試使用Silverlight來實(shí)現(xiàn)未來網(wǎng)上銀行一些功能。
為什么Silverlight在推出短短三年左右時(shí)間內(nèi)就能觸動(dòng)企業(yè)開發(fā)者呢?原因很簡(jiǎn)單,Silverlight具有良好的后臺(tái)語言框架支持,這就是基于.NET高級(jí)語言的精簡(jiǎn)運(yùn)行環(huán)境。具體而言原因有三:
- Silverlight之輕,即較之WPF、Java Swing、Delphi等C/S架構(gòu)有更加輕量的運(yùn)行環(huán)境與零維護(hù)的特點(diǎn):使用輕量的CLR Core運(yùn)行時(shí)環(huán)境,不依賴于客戶端環(huán)境(無須安裝體積龐大的.NET Framework,這一點(diǎn)太棒了)。
- Silverlight之重,即較之Html+JavaScript等B/S架構(gòu)有更優(yōu)越的客戶端彈性:使用C#高級(jí)語言代替JavaScript來實(shí)現(xiàn)強(qiáng)大的客戶端計(jì)算能力、支持多線程,繼承了WPF豐富的樣式、控件、特效與動(dòng)畫,更可控的瀏覽器適應(yīng)性,更安全的沙箱模式,客戶端嵌入式數(shù)據(jù)庫等。
- Silverlight之美,即較之傳統(tǒng)應(yīng)用有更友好的交互性,更酷的效果。支持完全面向用戶體驗(yàn)的開發(fā)過程,其快速原型工具使需求與交付物更為明確,用戶體驗(yàn)驅(qū)動(dòng)開發(fā),設(shè)計(jì)與編碼分離。
在本文中,筆者要著重強(qiáng)調(diào)的是Silverlight之輕!, Silverlight是企業(yè)應(yīng)用展現(xiàn)層的輕量級(jí)解決方案,從本文開始,筆者將采用連載的方式與大家一起探討Silverlight在企業(yè)級(jí)應(yīng)用解決方案與特性。
現(xiàn)在越來越多的企業(yè)已經(jīng)開始考慮將原有豎井狀的C/S與B/S架構(gòu)通過SOA等理念進(jìn)行重構(gòu)與集成,譬如建立以客戶、產(chǎn)品、合同為中心的主數(shù)據(jù)管理平臺(tái)(MDM),采用數(shù)據(jù)即服務(wù)的方式對(duì)邏輯層提供服務(wù),使用企業(yè)服務(wù)總線(ESB)對(duì)這些服務(wù)進(jìn)行消息路由、轉(zhuǎn)換、監(jiān)控及生命期管理,通過業(yè)務(wù)流程管理平臺(tái)(BPM)混編服務(wù)實(shí)現(xiàn)業(yè)務(wù)流程自動(dòng)化,通過業(yè)務(wù)規(guī)則管理平臺(tái)(BRM)實(shí)現(xiàn)對(duì)業(yè)務(wù)邏輯自動(dòng)化,最后這些應(yīng)用層服務(wù)形成了企業(yè)應(yīng)用的服務(wù)器端處理邏輯。
而展現(xiàn)層就是企業(yè)應(yīng)用中實(shí)現(xiàn)人機(jī)交互的最后一步,即信息的輸入與展現(xiàn)。現(xiàn)在的企業(yè)應(yīng)用解決方案中基于窗體的C/S與基于瀏覽器的B/S架構(gòu)幾乎構(gòu)成了企業(yè)應(yīng)用的全部,但兩者都有其優(yōu)缺點(diǎn),C/S架構(gòu)在客戶端的處理能力與交互性較強(qiáng),但維護(hù)性極差;相反,B/S架構(gòu)在客戶端的維護(hù)性極高,但對(duì)信息的處理能力、交互性、跨瀏覽器一致性方面都有不足。正是如此,相對(duì)C/S架構(gòu)更為輕型的Silverlight技術(shù)就成為了未來高度集成化的企業(yè)應(yīng)用中理想的展現(xiàn)層的候選方案。
傳統(tǒng)的C/S架構(gòu),無論是VC++、Delphi、Java的Swing、還是.NET的WinForm、WPF都需要安裝體積笨重的運(yùn)行時(shí)環(huán)境,即使客戶端程序永遠(yuǎn)不會(huì)使用運(yùn)行環(huán)境中的特殊組件,但使用者也只能被動(dòng)接受這些組件占用計(jì)算機(jī)資源。而Silverlight有著更為輕便的運(yùn)行式環(huán)境(Silverlight3的運(yùn)行時(shí)環(huán)境4.3M,Silverlight4為6M),在如此小的運(yùn)行環(huán)境下面有著B/S無法比擬的高級(jí)語言支持,也就是說Silverlight具有一顆.NET的心臟—CoreCLR。
CoreCLR簡(jiǎn)單來說就是CLR for Silverlight,是專門為Silverlight量身打造的輕型CLR,用來執(zhí)行Silverlight代碼。Silverlight基于C#高級(jí)語言,使用同樣的托管機(jī)制與MSIL中間語言,CoreCLR自備編譯環(huán)境、內(nèi)存管理器,不依賴于外部環(huán)境。打造這個(gè)輕型心臟的過程并不容易,對(duì)于輕型的RIA框架來說Silverlight運(yùn)行時(shí)環(huán)境要考慮兩大問題:大小與兼容性。
大小就是運(yùn)行時(shí)環(huán)境的大小,從用戶的角度來看,下載必須非常小。這就要求將功能集減至最少,目前 Silverlight4運(yùn)行時(shí)環(huán)境大小為6M,CoreCLR中的DLL文件在CLR和WPF的類庫中幾乎都能找到,只不過大大裁剪了尺寸。這其中就包括對(duì)基類庫(BCL)的消減,.NET BCL中的很多功能在 Web 客戶端上都沒有任何意義,例如:由于 Silverlight 不支持 CAS,因此大部分 System.Security 都不是必要的,System.Console 等許多桌面類在 Web 中也沒有任何意義。
因此,CoreCLR刪減了大量服務(wù)器端類庫(如ADO.NET),去除非泛型集合類(如ArrayList,完全可以通過泛型集合類代替),同時(shí)將復(fù)雜的桌面類也一并去除(如PLINQ和一些動(dòng)態(tài)類),但保留了.NET Compact Framework 和 Silverlight 間的兼容性。
對(duì)于兼容性而言,從編程人員的角度來看,針對(duì) CLR 的編碼應(yīng)該始終相同。因此,Silverlight堆棧底部的各個(gè)組件使用了與桌面CLR相同的代碼,執(zhí)行引擎和虛擬機(jī)都必須相同,這部件包括類型系統(tǒng)、元數(shù)據(jù)、垃圾回收器 (GC)、JIT 編譯器、線程池以及運(yùn)行時(shí)引擎的其他核心部件。但為了適應(yīng) Web 應(yīng)用程序,CoreCLR進(jìn)行了一些更改,如富 InterNET 應(yīng)用程序通常簡(jiǎn)單且運(yùn)行時(shí)間短,JIT 編譯器主要側(cè)重于減少啟動(dòng)時(shí)間,而非執(zhí)行更復(fù)雜的優(yōu)化操作,同樣,服務(wù)器垃圾回收模式可以對(duì)使用相似分配模式的多個(gè)工作線程進(jìn)行優(yōu)化,而對(duì) Web 托管應(yīng)用程序則行不通,因此,Silverlight 只包含針對(duì)交互式應(yīng)用程序進(jìn)行優(yōu)化的標(biāo)準(zhǔn)工作站 GC。
現(xiàn)在的.NET Framework里有一萬個(gè)類,十萬個(gè)方法,但CoreCLR中減少到了46個(gè)命名空間下不超過一千個(gè)類。
C#之父(同時(shí)也是Turbo Pascal與Delphi之父)Anders Hejlsberg認(rèn)為未來編程語言的發(fā)展趨勢(shì)及未來方向應(yīng)該朝著框架與工具發(fā)展。筆者認(rèn)為未來的語言發(fā)展方向不是朝著大而全的運(yùn)行時(shí)框架方向發(fā)展,而是朝著輕框架、重工具組件的方向發(fā)展。當(dāng)我們使用Visual Studio開發(fā)應(yīng)用程序時(shí),我們首先選擇的是語言,然后是運(yùn)行時(shí)框架,再引入我們需要的工具組件。而精干的運(yùn)行時(shí)框架與豐富的可選工具組件將為企業(yè)應(yīng)用提供更大的彈性、減輕程序大小、優(yōu)化響應(yīng)性能。
事實(shí)上,目前很多金融企業(yè)的核心應(yīng)用已經(jīng)在朝著去客戶化、去產(chǎn)品化的小核心方向發(fā)展,小核心+大外圍使企業(yè)內(nèi)部核心具有更加持久的生命力、更加靈活的擴(kuò)展性和更快的反應(yīng)能力。而企業(yè)應(yīng)用展現(xiàn)層也越來越青睞于使用小而靈活的運(yùn)行時(shí)環(huán)境,開發(fā)者完全可以根據(jù)實(shí)際需求挑選合適的工具組件,提供更富彈性的展現(xiàn)層應(yīng)用。Silverlight的未來應(yīng)該更加關(guān)注適用性,而不應(yīng)該過度考慮基本功能的強(qiáng)大,否則將發(fā)展成為另一個(gè)WPF,而失去自己的方向。
Silverlight4將Silverlight3的身軀加大了1.7M,加入了一些諸如集合接口ISetT、延遲初始化類LazyT、元組對(duì)象工廠類Tuple等復(fù)雜類型,加重了Silverlight內(nèi)核。因此,在Silverlight5的Wish List中,筆者強(qiáng)烈要求Silverlight5關(guān)注解決跨設(shè)備的問題,而不要過度考慮加重基礎(chǔ)類庫的強(qiáng)大功能,加重Silverlight的包袱,使原本輕便的Silverlight CoreCLR變得更加臃腫,無法起飛。
對(duì)于未來,希望Silverlight仍能輕舞飛揚(yáng)!
相關(guān)文章:Silverlight之輕
it知識(shí)庫:Silverlight之輕,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。