首頁 »
2009/08/21

多個Silverlight專案共用Mid-Tier公用程式的三種方式


2009年7月號的台灣微軟MSDN Flash,祭司撰文一篇【多個Silverlight專案共用Mid-Tier公用程式的三種方式】,其中的要訣就是使用最新的.NET RIA Services技術,透過它來撰寫CRUD的資料存真的是十分方便,也不用理會AJAX那種低生產力的開發方式,最後還可以達成N-Tiers分散式的架構。


    當Web的N-Tiers分散式架構蔚為主流後,不例外的,Silverlight專案也慢慢步上N-Tiers這條道路,N-Tiers在良好的系統分層規劃下,不但好開發、容易除錯、具延性與好維護,最重要的是Mid-Tier中間層的程式碼,可以供眾多不同的Silverlight展現層專案共用,這是本篇專欄要聚焦討論的地方。

而當Silverlight專案愈來愈多,程式碼愈來愈大,甚至分由不同小組開發維護時,若您是採用不加思索的Copy&Paste方式,如此引用Mid-Tier中間層公用程式到每個Silverlight專案中,無形中您已埋下系統架構分崩離析的苦果,隨著專案程式愈趨龐雜,最後導致各個Silverlight系統都各自修改與維護,所謂的"共用"已名存實亡,且Copy的公用程式版本可能連自己都搞不清楚是哪一版的,更遑論要做到正確的共用。

為了避免落入上述N-Tiers分散式開發與維護的瓶頸,讓我們來看看Silverlight 3這個世代是如何克服"N-Tiers分散式開發與維護"這個議題,配合Silverlight 3分散式開發,有一個新的對應解決方案稱之為「.NET RIA Services」,它的目的在於能夠快速又容易地建立分散式N-Tiers應用程式,讓多個Silverlight專案可以有效共同相同的Mid-Tier中間層的公用程式,其提出的可行之道有三種作法:
  • 產生Proxy型別物件(Generated proxy types)
  • 分享原始程式碼(Shared source files)
  • 分享組件(Shared assemblies)

詳細分述如下:
1.產生Proxy型別物件(Generated proxy types)
其做法是在Mid-Tier專案中建立.NET RIA Services的「DomainService類別」,DomainService類別之中再建立許多CRUD公用方法,而VS 2008的Solution之中若有數個Silverlight專案參考到Mid-Tier的DomainService類別,則於Solution編譯建置時,系統就會自動在Silverlight的Client專案中產生一個Proxy型別的程式,它可以說是Mid-Tier的DomainService類別在Silverlight Client專案中的一個Proxy類別投影。有了這個proxy投影,Silverlight便可以自由自在呼叫使用原本屬於Mid-Tier的公用程式,且Silverlight程式撰寫時,還受到Proxy物件的IntelliSense良好提示。
圖1 產生Proxy型別物件示意圖

這個做法是.NET RIA Services對N-Tiers系統,分享共用中間層公用程式的預設方式,也是一條最簡便的途徑,因為一路上有許多精靈工具輔助,例如先建立好Entity Framework的EDM定義,然後DomainService精靈便可讓您用勾選的方式,選擇您所要的資料表,接著就能自動產生Mid-Tier對應CRUD的公用程式,最後再於Solution編譯建置時,自動將DomainService的CRUD程式發佈到Silverlight專案中,過程完全不需要人為或手工程式的介入。
圖2 勾選產生欲公開資料表之CRUD程式

2.分享原始程式碼(Shared source files)
分享Mid-Tier的原始公用程式碼有兩種做法,一是「Naming Pattern」命名,另一個是加入類別Link參考,前者是自動產生與維護Client端參考,後者是人為手工加入,但於Mid-Tier程式有異動時,需人工自行更新Silverlight專案中的參考,否則便無法套用最新的程式。

而二者實際的做法分述如下:
  • Naming Pattern命名
所謂的「Naming Pattern」,就是將原本公用的程式類別,例如:*.cs或*.vb,附加「.shared」關鍵字,變成「*.shared.cs或*. shared .vb」,這樣系統就會知到這是Mid-Tier要自動分享產生到Silverlight專案的程式。而自動產生有個好處,就是Mid-Tier程式異動時,您完全不必擔心哪些Silverlight專案,參考了哪些Mid-Tier的*.shared.cs/vb程式碼,如此就免除了參考檔案維護上的負擔。
圖3 Shared Code自動發佈到Silverlight專案

  • 加入類別Link參考
加入類別Link參考其實不算新的做法,因為這是Visual Studio原本就具備的功能,它是透過【Add As Link】加入Mid-Tier既有的*.cs或.vb程式到Silverlight專案,只不過它是一個參考。而它的一大缺點是,原始Mid-Tier程式若做更動,必須人工重新加入參考,否則依舊是舊版的程式,且Silverlight專案一多,這種加入類別Link參考的作法,有可能會變成管理上的一大負擔。
圖4 加入類別的Link參考

3.分享組件(Shared assemblies)
若您想將Mid-Tier公用程式以組件方式提供多個Silverlight專案使用也可以,其做法在「.NET RIA Services Class Library」類型的專案中,加入Mid-Tier公用程式的參考,然後將它編譯成.dll組件,再供眾多Silverlight專案來參考使用。
圖5 以組件方式分享給Silverlight專案

以上是Silverlight分散式架構中,.NET RIA Services所提出幾種具體可行的解決方案,您可以評估採用其中一種合適的技巧,或者幾種混用也可以,若能善用新世代.NET RIA Services對N-Tiers分散式開發的輔助,不僅是開發容易,就連維護都可以省掉一大半心力,我想這是.NET RIA Services最令人驚艷的獨到特色。

  • .NET RIA Services參考網站
http://code.msdn.microsoft.com/RiaService



.NET 4.0的平行運算新功能←上一篇 │首頁│ 下一篇→2009年8月號MSDN Flash預告
本文引用網址: