Silverlight 之重
請(qǐng)大家不要覺得奇怪,架構(gòu)的輕與重永遠(yuǎn)都是相對(duì)而言,雖然Silverlight相對(duì)于傳統(tǒng)C/S架構(gòu)有更加輕型的運(yùn)行時(shí)環(huán)境,但相較于Html+JavaScript等傳統(tǒng)B/S架構(gòu)確實(shí)具有更加龐大的基礎(chǔ)類庫(kù)支持。Silverlight依靠.Net平臺(tái),使用C#高級(jí)語(yǔ)言代替JavaScript腳本語(yǔ)言,實(shí)現(xiàn)了強(qiáng)大的客戶端計(jì)算能力、支持多線程,繼承了WPF豐富的樣式、控件、特效與動(dòng)畫,更可控的瀏覽器適應(yīng)性,更安全的沙箱模式,客戶端嵌入式數(shù)據(jù)庫(kù)等,這就是本期要給大家介紹的重點(diǎn)—Silverlight之重。
自上世紀(jì)90年代以來(lái),Html+JavaScript幾乎占據(jù)了Web應(yīng)用的全部,在近20年的發(fā)展過(guò)程中,一大批工具化的JavaScript框架應(yīng)運(yùn)而生,比如輕量級(jí)的JQuery、重量級(jí)的ExtJs和Dojo等都為開發(fā)者建立Web應(yīng)用提供了多種選擇。 ExtJs框架有強(qiáng)大的UI展現(xiàn)層,已經(jīng)在Turbo CRM等企業(yè)級(jí)應(yīng)用中有實(shí)際案例,而Dojo有IBM、Oracle等大公司撐腰,Struts2更將Dojo集成在客戶端框架中,該框架甚至還支持離線瀏覽。
雖然以上框架已經(jīng)具有相當(dāng)可觀的基礎(chǔ)庫(kù)支持,但Silverlight的架構(gòu)卻擁有更加重量級(jí)的高級(jí)語(yǔ)言支持,使得它可以完成JavaScript框架所不能實(shí)現(xiàn)的功能,Silverlight之重就體現(xiàn)在以下幾方面:
· 基于.Net平臺(tái),擁有豐富的基礎(chǔ)類庫(kù)支持,可以快速構(gòu)建復(fù)雜的企業(yè)級(jí)應(yīng)用
Silverlight擁有強(qiáng)大的.Net平臺(tái)支持,自Silverlight1.1使用.Net運(yùn)行時(shí)環(huán)境以來(lái),Silverlight類庫(kù)已經(jīng)得到極大的擴(kuò)充,并集成了WPF、WCF、LINQ、DLR、COM等.Net平臺(tái)的優(yōu)秀技術(shù),下圖是MSDN上關(guān)于.Net for Silverlight的支持圖例。
由于Silverlight使用了WPF展現(xiàn)層控件庫(kù),使得Silverlight與WPF共享代碼不存在任何技術(shù)屏障,事實(shí)上Silverlight就是一種桌面應(yīng)用在Web上的輕量級(jí)實(shí)現(xiàn),即便存在一些差異,我們也可以通過(guò)下面的代碼將Silverlight應(yīng)用與桌面應(yīng)用粘合在一起。
- #if SILVERLIGHT
- dynamic excel = AutomationFactory.CreateObject("Excel.Application");
- #else
- dynamic excel = Microsoft.VisualBasic.Interaction.CreateObject("Excel.Application", string.Empty);
- #endif
目前已經(jīng)有很多重型的企業(yè)級(jí)架構(gòu)實(shí)現(xiàn)了Silverlight與WPF共享類庫(kù),比如Prism項(xiàng)目。
Silverlight運(yùn)行時(shí)環(huán)境目前已經(jīng)有近千個(gè)可供使用的類,而ToolKit與大量的第三方工具程序集可以為Silverlight提供更加強(qiáng)大的后援支持。因此在RIA企業(yè)級(jí)應(yīng)用開發(fā)過(guò)程中,團(tuán)隊(duì)可以通過(guò).Net強(qiáng)大的基礎(chǔ)庫(kù)與工具集快速構(gòu)建出復(fù)雜的企業(yè)級(jí)應(yīng)用。
· 支持多線程,支持UI線程與后臺(tái)線程分離,具有更大的性能優(yōu)勢(shì)
Silverlight具有彼此分離的UI線程與后臺(tái)線程,可以將客戶端的耗時(shí)操作放在后臺(tái)線程中處理。這樣做有兩方面的收益:第一,由于沒(méi)有在UI線程中執(zhí)行耗時(shí)操作,避免了UI線程阻塞,提高了UI響應(yīng)速度;第二,由于沒(méi)有將操作放在服務(wù)器端運(yùn)行,減少了網(wǎng)絡(luò)的調(diào)用開銷,同時(shí)通過(guò)使用客戶端資源降低服務(wù)器端壓力。Silverlight多線程可以通過(guò)多種方式實(shí)現(xiàn),比如Dispatcher、BackgroundWorker、ThreadPool都可以輕松創(chuàng)建后臺(tái)線程,并可以通過(guò)事件句柄實(shí)現(xiàn)線程間異步通信。(敬請(qǐng)期待本專欄第五期《Silverlight的多線程能力》)
· 豐富的服務(wù)器端通信能力
目前Silverlight支持TCP、UDP、Socket等網(wǎng)絡(luò)協(xié)議,以及HttpHandler、WebServices等多種應(yīng)用層協(xié)議,還可以通過(guò)WCF RIA Service數(shù)據(jù)“透明”訪問(wèn)方式(通過(guò)向客戶端公開數(shù)據(jù)訪問(wèn)層,屏蔽了通信層手工編碼)快速實(shí)現(xiàn)實(shí)體通信。
在原有應(yīng)用集成方面,如果服務(wù)器端使用.Net平臺(tái),那么Silverlight客戶端程序可以重用原有通信方式,而不必對(duì)服務(wù)器端程序有較大改動(dòng),如果服務(wù)器端使用Java平臺(tái),Silverlight也提供標(biāo)準(zhǔn)WebServices、Http、Socket多種交互方式進(jìn)行通信,服務(wù)器端只要進(jìn)行簡(jiǎn)單的服務(wù)封裝就可以實(shí)現(xiàn)與Silverlight客戶端的數(shù)據(jù)通信。因此,Silverlight基于.Net提供了快速與服務(wù)器端程序集成的能力。事實(shí)上,在筆者所開發(fā)的項(xiàng)目中,已經(jīng)實(shí)現(xiàn)了Silverlight客戶端與.Net、J2EE(通過(guò)REST接口)、Tuxedo(通過(guò)SALT接口)的數(shù)據(jù)連通性。(敬請(qǐng)期待本專欄第六期《Silverlight與J2EE通信》)
· LINQ語(yǔ)言的支持
LINQ是一種開發(fā)高效的聲明式語(yǔ)言,開發(fā)者通過(guò)可以這種類似SQL的語(yǔ)言快速構(gòu)建數(shù)據(jù)邏輯,而避免了原有面向?qū)ο蟛僮髦械膹?fù)雜過(guò)程,當(dāng)然這只是LINQ的外在表現(xiàn)形式。其實(shí)LINQ申明式語(yǔ)言依賴于Lamda表達(dá)式,而Lamda表達(dá)式的背后是強(qiáng)大的表達(dá)式樹ExpressionTree,LINQ to Any的真正強(qiáng)大在于將數(shù)據(jù)邏輯的具體實(shí)現(xiàn)方式與書寫方式分離開,使開發(fā)者使用一種方式就可以訪問(wèn)和操作各種數(shù)據(jù)對(duì)象。而Silverlight集成了LINQ語(yǔ)言,在實(shí)際的應(yīng)用開發(fā)中,開發(fā)者可以通過(guò)更加簡(jiǎn)單的方式來(lái)實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯;另一方面,Silverlight同樣集成了強(qiáng)大的表達(dá)式樹,使得開發(fā)者可以通過(guò)自行擴(kuò)展表達(dá)式樹來(lái)構(gòu)建LINQ To Any的適配器,也可以使用表達(dá)式樹來(lái)構(gòu)建更加復(fù)雜的動(dòng)態(tài)語(yǔ)法和動(dòng)態(tài)LINQ。當(dāng)然,如果未來(lái)微軟將PLINQ的并行查詢語(yǔ)言集成到Silverlight中,那將使Silverlight的查詢性能更近一步。(敬請(qǐng)期待本專欄第七期《Silverlight輕量級(jí)查詢對(duì)比》)
· 客戶端嵌入式數(shù)據(jù)庫(kù)支持
Silverlight內(nèi)置IsolatedStorage可以操作獨(dú)立存儲(chǔ)中的數(shù)據(jù),但這還不足以實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)操作,我們需要在Silverlight項(xiàng)目中引入第三方嵌入式數(shù)據(jù)庫(kù)程序集,實(shí)德Silverlight可以通過(guò)客戶端獨(dú)立存儲(chǔ)來(lái)建立客戶端嵌入式數(shù)據(jù)庫(kù),實(shí)現(xiàn)在脫機(jī)狀態(tài)下存儲(chǔ)與管理數(shù)據(jù)。開發(fā)者可以通過(guò)嵌入式數(shù)據(jù)庫(kù)快速構(gòu)建純客戶端(包括桌面、移動(dòng)設(shè)備等)的信息管理應(yīng)用,甚至實(shí)現(xiàn)基于嵌入式數(shù)據(jù)庫(kù)緩存的“云與端”應(yīng)用。目前支持Silverlight的嵌入式數(shù)據(jù)庫(kù)選擇已經(jīng)相當(dāng)廣泛,比如Siaqodb、EffiProz、Perst、Rapid Repository(WP7 DataBase)等都有專門針對(duì)Silverlight的嵌入式數(shù)據(jù)庫(kù)與管理工具。(敬請(qǐng)期待本專欄第八期《Silverlight嵌入式數(shù)據(jù)對(duì)比》)
· 動(dòng)態(tài)語(yǔ)言支持
Silverlight對(duì)動(dòng)態(tài)語(yǔ)言的支持分為:對(duì)JavaScript的互操作性、對(duì)dynamic動(dòng)態(tài)類型的支持和DLR的集成。
在對(duì)JavaScript的互操作性方面,Silverlight可以通過(guò)System.Windows.Interop類集將其應(yīng)用程序中的控件暴露成Html DOM,實(shí)現(xiàn)內(nèi)部控件對(duì)外部JavaScript的可見性;Html反向可見性是通過(guò)System.Windows.Browser類集來(lái)實(shí)現(xiàn)的,Silverlight可以與Html對(duì)象或者JavaScript對(duì)象進(jìn)行交互。Silverlight中支持dynamic動(dòng)態(tài)類型,允許在運(yùn)行時(shí)動(dòng)態(tài)加載對(duì)象。通過(guò)Silverlight 集成了動(dòng)態(tài)語(yǔ)言運(yùn)行時(shí)環(huán)境DLR,目前支持IronPython、IronRuby、JScript等動(dòng)態(tài)語(yǔ)言在Silverlight應(yīng)用程序中的執(zhí)行。
· 與COM的互操作
Silverlight脫瀏覽器應(yīng)用(OOB)可以在客戶端創(chuàng)建并操作COM對(duì)象,比如打開Word、Excel等所有在客戶端操作系統(tǒng)中注冊(cè)的COM組件,Silverlight5甚至允許在瀏覽器中調(diào)用Office COM對(duì)象,在OOB模式下更可以調(diào)用任何外部Windows應(yīng)用程序,并支持對(duì)USB設(shè)備與條形碼掃描器等更多外設(shè)的API調(diào)用。
· 3D引擎與豐富的多媒體控制
Silverlight基礎(chǔ)類庫(kù)包含MediaElement控件,可以在Silverlight程序中控制媒體對(duì)象,也可以通過(guò)System.Windows.Media類集對(duì)繪圖、文本和音頻/視頻內(nèi)容進(jìn)行編程,比如通過(guò)Brush、ImageBrush、VideoBrush繪制更加豐富的媒體內(nèi)容;通過(guò)BitmapImage類自定義點(diǎn)陣圖片,實(shí)現(xiàn)諸如粒子效果的應(yīng)用;通過(guò)System.Windows.Media.Animation類集來(lái)創(chuàng)建動(dòng)畫;通過(guò)System.Windows.Media.Effects實(shí)現(xiàn)模糊、陰影等多種視覺特效;通過(guò)System.Windows.Media.Media3D操作3D投射矩陣。
Silverlight5還將增加GPU3D加速的API支持,增加3D視覺特效,增加即時(shí)模式圖形API,允許將圖形圖像直接呈現(xiàn)到GPU,這些特性的加入將使Silverlight具有更強(qiáng)大的媒體展現(xiàn)能力。
· MEF擴(kuò)展性管理框架的支持
MEF (Managed Extensibility Framework )擴(kuò)展性管理框架,是.NET平臺(tái)下用于創(chuàng)建可擴(kuò)展的輕型應(yīng)用程序的庫(kù)。在Silverlight SDK(C:\Program Files\Microsoft SDKs\Silverlight\v4.0\Libraries)中我們可以找到System.ComponentModel.Composition.dll與System.ComponentModel.Composition.Initialization.dll這兩個(gè)動(dòng)態(tài)鏈接文件。在Silverlight項(xiàng)目中引用后,就可以使用MEF擴(kuò)展性管理框架,該框架以聲明方式指定其功能,在運(yùn)行時(shí)通過(guò)MEF 組合引擎發(fā)現(xiàn)部件。應(yīng)用程序無(wú)需硬編碼的引用或脆弱的配置文件即可利用相關(guān)部件,其依賴項(xiàng)注冊(cè)的實(shí)現(xiàn)方式甚至比基于配置的Spring還要簡(jiǎn)單,Silverlight完全可以利用MEF構(gòu)建擴(kuò)展性極強(qiáng)的企業(yè)級(jí)應(yīng)用。
由此可見,Silverlight擁有比JavaScript更為重型的框架支撐,通過(guò)Silverlight可以快速移植桌面應(yīng)用到Web端,也可以將Web應(yīng)用脫開瀏覽器執(zhí)行,或者構(gòu)建輕型的桌面應(yīng)用、移動(dòng)設(shè)備應(yīng)用。應(yīng)該說(shuō)Silverlight不僅僅是Web應(yīng)用,在MSDN的知識(shí)庫(kù)中,Silverlight已經(jīng)從Web開發(fā)節(jié)點(diǎn)轉(zhuǎn)到了.Net開發(fā)節(jié)點(diǎn)下,從這一點(diǎn)上可以看出微軟正在進(jìn)行Silverlight轉(zhuǎn)型。
而未來(lái)的Windows 8操作系統(tǒng)的瘦客戶端UI-“Jupiter”將采用Silverlight,該界面將允許運(yùn)行在基于ARM CPU的平板設(shè)備上。Silverlight 4憑借優(yōu)秀的框架已經(jīng)獲得了InfoWorld評(píng)出的2011年度最佳RIA平臺(tái)獎(jiǎng)項(xiàng),未來(lái)Silverlight還將擔(dān)負(fù)Web應(yīng)用、移動(dòng)應(yīng)用和桌面應(yīng)用的統(tǒng)一大業(yè),Silverlight之重也在于此!
原文鏈接:http://www.infoq.com/cn/articles/wl-silverlight-heavy
【編輯推薦】