2011年3月1日 星期二

1-1 嶄新功能、全新登場

        之所以一開始說嶄新功能、全新登場,我想讀者不難知道原因,當然是因為Silverlight 1.0曾經轟轟烈烈的在2007年登場,而微軟在不到一年的時間當中,將Silverlight 2.0正式端出來上菜,而本書第一版出版的當時,距離1.0推出才不過兩三年的時間,你現在下載使用的已經是4.0(搞不好,是5.0)了。如果沒有一個很令人折服的理由,我想這麼迅速的推出新版應該不是一件令人歡迎的事情。

        然而,Silverlight 2.0的推出,卻是微軟RIA(Rich Internet Application)開發人員社群當中期待已久的一個里程碑,對於熟知微軟Web開發技術Roadmap的技術人員來說,這是一個有機會讓大家重新洗牌的開始。

 Silverlight 1.0Silverlight 2.0

        從底下的這張圖表當中,我們不難發現,Silverlight 2.01.0多出了幾乎200%的功能與擴充,除了WPF子集合提供的基本圖形化處理能力之外,Silverlight 2.0提供了一堆讓程式設計師會愛不釋手的功能,這也是在開發社群當中,會期待2.0出現的一大原因:


        如果你看上表,不難發現很多功能都是開發人員的最愛,諸如:控制項的支援、資料繫結、遠端資料存取能力、多執行緒、檔案上傳、近端檔案存取、LINQ…這些對於我們開發Web Solutions有著不可或缺的價值。

        Silverlight 2.0之後,擴充了對Networking的支援,諸如:REST WS*/SOAPPOXRSS、以及標準的HTTP Services,這部分很重要,它讓我們可以利用過去大家已經很熟悉的Web Services技術(而現在我們建議您採用WCF Services),輕易的抓取到後端資料庫中的內容。同時,它也支援了Cross-domain(跨網域)調用(過去在1.0是被限制的),更重要的是,Silverlight將可支援Socket(這是我最期待的,其意義非凡),一但有了Socket,運行在瀏覽器上的應用程式將可以大大不同。

        另外 Silverlight 2包含了Rich WPF-based UI framework ,簡單的說,就是前端使用者介面與控制項的支援,由於這組framework 包含graphics animationengine 讓開發人員得以更輕易的建立出RIA(Rich interactive application),同時具備了建立控制項、layout managementdata-bindingstyles、和template skinning等機制(在後面的章節中我們會陸續介紹)

        如此一來,開發人員將可以輕易的在Silverlight當中,建立出能夠重複使用的控制項(UserControl或是Silverlight Control),未來的Rich Web應用程式可以非常接近WinForm的設計模式。還有,開發人員可以透過已經熟悉的幾種.NET語言諸如 VB C#F#...)來進行開發。理所當然,程式是執行在用戶端的瀏覽器中(靠的是那5.7MBRuntime在用戶端無須安裝.Net framework),同時,您現在可以輕易的透過VS2010來開發Silverlight 4.0應用程式。

        Silverlight 2.0版本當中,已經內建了不少控制項,包含TextBoxCheckBoxRadioButtonStackPanelGridPanelSliderScrollViewer CalendarDatePickerDataGridListBox...等,幾乎常見的控制項都已經可以看到。同時,由於支援了control templating 機制,讓開發人員可以透過類似ASP.NETUserContorl一般的機制,自行組合幾個控制項以建立出更好的控制項。

        最後,就是.NETClass Library的支援,在Silverlight 2 當中除了可以透過.NET支援的C#VB來開發應用程式之外,更重要的是,Run-Time包含了一些 .NET Class library 的能力,諸如CollectionsIOgenericsthreadingglobalizationXMLlocal storage。這些名詞只要是開發人員就一定熟悉,我想各位也不難了解它背後所代表的意義。

        同時,最最重要的是,Silverlight包含了可以整合.NET CodeHTML DOMAPI,讓我們可以透過Silverlight當中所支援的語言來撰寫程式碼,同時又可以控制HTML DOM,或是與網頁上的JavaScript互動。最後,Silverlight也支援了LINQ,並且可以透過WCF RIA Services來以更輕鬆的方式存取遠端的資料,支隊local端資料存取則有data caching storage機制,讓資料的存取更加的便利。

        總的來說,Silverlight 2.0已經和1.0有相當大的區隔,比起FlexFlash有過之而無不及,不再只能像過去FlashFlex一樣,用來在網頁上做做開場動畫、或是作為填補空虛網頁內容或點綴的小區塊,而是可以實際開發RIA的強大前端技術。

備註:
這也是筆者常常在研討會或是BLOG上竭力說明的,請不要再把Silverlight拿來跟FLASH相提並論,或是只是拿Silverlight來做做網站的開場動畫,Silverlight整個就是拿來做在網際網路上跑的Web應用程式的,就是我們說的RIA(Rich Internet/Interactive Application),如果只是作動畫,實在是有點浪費了。



到底是做網站還是做程式?

        打從ASP.NET推出以來,這一直是一個重要的IssueASP.NET在一開始的定義是提供企業開發所謂的Web Application,一種以internetintranet為主要傳輸架構、以HTML作為呈現展示層的骨架的應用程式,白話一點說,可以就是跑在網際網路上的應用程式。
可以跑在網際網路上,這句話隱含了一些重要的意義,這表示相對於傳統的Windows應用程式而言,Web Application有底下特性:
1.       應當可以達成用戶端跨平台(可用在Windows, MAC, Mobile)
2.       Windows應用程式佈署、更新更加容易
3.       只需要Thin Client即可運行(表示企業可以買便宜一點的PC)
4.       操作簡單、不需要太多的教育訓練就可以上手(誰不會上網呢?)

        這是理想,但是可能與事實不盡然全然符合,打從2002.NET推出,到現在走過了快10年的時間,這10年我們說服了多少客戶轉換成Web Application,但是在這個過程當中,利弊得失,恐怕只有身為開人員的我們,自己才最清楚。更何況,每一個不同的case,恐怕得到的效果與評價就不同。
備註:
在這邊筆者要特別說明,正如我在TectED 2008一直強調的,技術本身並沒有好壞,技術是中性的,端看我們把技術使用在什麼場合。也就是說,身為開發人員的我們,要在得知客戶的需求之後,經過評估,選擇最適合的技術使用在客戶端,道理我想大夥都懂,但是往往礙於某些奇怪的理由,我們並不一定會這麼作,導致專案或產品並不符合客戶的期待或需求。
把適合的技術用在適當的地方,是我特別要強調的,當我們手上掌握了許多的技術之後,如何選擇,一直是一個相當重要的議題。


        這部分是非戰之罪,並非所有產品都適合以Web架構來開發,不過反過來講,也當然有一些產品非常適合以 Web應用程式的架構來開發,設計師與開發人員必須要妥善的在其中選擇。

        話說回來,當我們用ASP.NET開發Web應用程式的時候,會發現往往力有未逮,在UI處理上我們費盡心力,就是無法達成使用者的期待,滿足客戶的需求。

        這個原因不難理解,客戶不見得懂技術,客戶看Web Application的標準是以應用程式的標準,而非網站(網站我們待會再討論)。應用程式所該有的一些特性、功能的多面性與複雜性,和網站是不可混為一談的,客戶用Windows應用程式的標準來看我們以ASP.NET所開發出的Web Application難免會覺得怎麼操作介面略遜一籌。

舉個簡單的例子,我有一個客戶,希望能夠在Web Application中做一個『簡單的表格』,然後能夠編輯後端DB資料表中的數據,我心想:『這個容易,我用ASP.NETGridView控制項就可以了』。

        然而當我詳細的詢問需求之後,發現不得了,這個『簡單的表格』所謂的編輯功能,是要和Excel一樣,要能夠鎖定表頭、要能夠運算加總、要能夠隱藏欄位、要能夠篩選和過濾這些,都要能夠在UI上呈現,這根本就超過Web Application所倚賴的展示層技術HTML所提供的功能的上限,但是這樣的需求少嗎?

        如果你也是專案中的開發人員,我相信你應該知道,這樣的需求比比皆是。因此,我們開始利用JavaScript、利用CSS技術、想要『突破傳統』的在Web Application的世界中建立出我們需要的操作介面,不難,但是卻花費了相當多的時間、精神、資源唯一希望達到的效果就是,讓應用程式能夠接近WinForm所開發出的UI效果這件事,回頭想想,豈不荒謬至極?

        然而為了上述那幾個Web Application的遠大目標,我們還是硬著頭皮把這些功能做出來,而最近一兩年火紅的
AJAX技術,也或多或少是為了達成前面提到的這一些在Web Application上所無法達成的功能,一晃眼幾年過去了,昔日的程式設計師早已變成資深系統分析師或PM,而企業的需求不變、我們碰到的困難不變、但是,作法呢? 也不變? 我們還是要像以前一樣嗎?

        還是要那麼辛苦的去實現客戶的需求? 經過了那麼多年,難道我們還是沒有更有效的方式來實現Web Application的前端操作介面嗎?

        隨著Silverlight 4.0的出現,它將會是Web Application操作介面的一個優秀的解決方案

Web應用程式到RIA

        RIA(Rich Internet/Interactive Application)這個字的出現,多多少少暗示著,傳統的Web Application的操作介面太遜了,遜到使用者無法接受的程度。

        然而反觀WinForm所開發的應用程式也很有趣。有一度,WinForm流行著一種Application Skin技術,可以把WinForm所開發的應用程式替換上一層介面外衣,類似像MediaPlayer、或是MP3Player等媒體播放器,都會採用這樣的技術,但是這種技術並沒有席捲整個辦公室應用程式,充其量也只是一時的流行,因為企業不需要一個很炫的外觀,而是需要一個實用的應用程式。(或許這也是WPF技術目前還沒有看到太多人買帳的原因之一)
然而在Web Application上,RIAUser Experience這種字眼卻到處可見,企業的目標與需求不變,還是一樣,大家只是要一個方便實用的應用程式,但是為何Web Application卻會強調這一段呢?顯然,過去這幾年Web Application給人的印象就是:操作介面不佳、反應慢、效能差。

        連一個簡單的Chart、或是單純的表格都做不好更晃論先前那些其他遠大的理想(諸如:數位儀表板、行動辦公室什麼的),一樣的,這是非戰之罪,我們都知道HTML本來就不適合做為應用程式的呈現介面,HTML是用來呈現『文件』的,誰叫我們硬是拿來呈現『應用程式』呢,讓客戶失望無可避免。

未來的Web應用程式開發架構

        Silverlight出現後,這一切將會開始有所不同,從本書中的範例(Web ChartScheduleForum…等範例)中,你將會看到Silverlight所帶來的這些改變,我們一樣可以達成先前更新佈署容易的目標、一樣可以用Thin Client的架構、一樣可以讓應用程式在internet/intranet上無障礙的運行,但是卻可以突破先前在用戶端操作界面上的限制,讓客戶(使用者)有相當好且與過去截然不同的操作體驗。

        過去所需要大費周章甚至無法完成的功能,現在透過ASP.NET配合Silverlight可以輕鬆的完成。

        所有老闆喜歡看到的字眼:降低開發成本、提高重用性、加快開發速度、提升客戶對使用介面的滿意度…都將會隨著Silverlight的出現而真正發生。

        但是我要對進階的開發人員說,請注意,Silverlight應用程式的開發架構,某種程度上來說,可以視為SOA(service-oriented architecture)架構的實現!

        ?服務導向應用程式開發架構,是的。對這個term有印象嗎? 過去它曾經被炒作了好一陣子,在Web Service剛起來那時候,SOA被喊得震天價響,後來就自動的慢慢沉寂,搞什麼?

        原因很簡單,當年時候還沒到(礙於書籍篇幅,請原諒我們解釋為什麼,前面說過,如過你對一些觀念有興趣,歡迎上網討論),而現在我回頭看整個Silverlight的開發架構,它就是SOA的一種實現,我公司所開發的Silverlight應用程式100%就是View(展示層),事實上所有的商業邏輯、資料處理我是放在WCF或是Web Service後面的Business Object當中的:
        過去我們所開發的ASP.NET並沒有這種清楚的架構(老實說現在的ASP.NET想要改變也為時已晚,現在硬生生的把ASP.NET WebForms改成ASP.NET MVC的結果到底好不好,還有待觀察),但是Silverlight打從一開始就註定是這個架構,我相信這是一個好的開始,讓開發人員很清楚Silverlight要做什麼,後端的WCF Service/Web Service要做什麼,並且該放在Application Server上的Buseness Object,就讓它在Application Server上,程式碼層次分明。

        關於架構的部分我們後面再討論,對初學者來說,可以先別管上面這張圖,實際上開發人員在撰寫程式碼的時候都只是在Visual Studio環境當中,因此不會太複雜,倒是如果對架構有興趣的開發人員可以稍微思考一下,在這個架構底下,對於開發人員來說是有著相當多好處的。

ASP.NET應用程式將會消失嗎?

        從剛才討論過的架構,以及你將在本書看到的幾個範例中會發現,對於ASP.NET來說,筆者幾乎都只拿來開發Web Service以及WCF Service,單單靠.htmlSilverlight所開發出的應用程式即可搞定一切的需求,如果是這樣,那未來ASP.NET應用程式將會消失嗎?

        這個問題,在這邊我們現在無法回答你,但是隨著筆者後面接續的每一章內容,我相信讀者將會逐漸有自己的定見,也許現在不是一個討論這個問題的時刻,或許我會在本書最後幾個章節,來聊聊Silverlight出現後,對ASP.NET 的影響和即將帶來的改變。

        不過我們可以在這邊先這麼說,消失這兩個字恐怕太沉重,然而在這個階段如何讓ASP.NETSilverlight整合,並且可以互補搭配和相互應用,卻是一個相當重要的主題,也因此,您會看到我們在後面幾個章節,將會討論到SilverlightASP.NET整合的這個部分。有了這些基礎之後,相信Web應用程式的未來介面,將能夠掌握在你的手中

沒有留言:

張貼留言