Silverlight 4、DomainDataSource 與 WCF RIA Services(2)

當你設定好 ADO.NET 實體資料模型以及 Domain Service Class ,我們就可以將資料經由 RIA Services 跨越網路傳送至客戶端的 Silverlight UI ,你可以選擇透過程式碼篩選資料然後將其繫結至控制項展現資料內容,或是直接經由 XAML 進行繫結設定。我們先來看比較單純的 XAML 作法。

假設於 SQL Server 上有一個客戶資料表 Customers ,內容如下


建立一個 Silverlight Business Application ,將其命名為 DataGriddemo ,於其中的 DataGriddemo.Web 專案中針對 Customers 資料表建立一個 ADO.NET 實體資料模型,命名為 Customers.edmx ,完成之後畫面如下:


接下來建立使用這個資料模型的Domain Service ,將其命名為 DS_Customers.cs 。切換至 Silverlight 專案,開啟 Views/MainPage.xaml 檔案,也就是一開始建立專案時預設開啟的網頁,於其中配置一個 DataGrid ,將其命名為 dgCustomers ,以及一個 DomainDataSource 命名為 dsCustomers ,畫面看起來像這個樣子:

 
切換至 XAML 程式畫面,於其中輸入底下框線標示的程式碼:

 執行這個範例會得到以下的結果:




這裏我們很快的示範了 DataGrid 與 DomainDataSource 控制項,其它更進一步的細節,在後續的文章進行說明。

測試 Silverlight 外掛安裝與未安裝的效果

就算網路上的電腦有 99.9% 都已經安裝了 Silverlight ,我們在開發嵌入 Silverlight 內容的網頁時,還是必須考慮沒有安裝 Silverlight 的機器,提供這些使用者引導畫面,不過我們下次再來討論這一部份的設計,這裏要談的是測試的問題。
假設我們已經分別針對不同狀況的環境設計好了網頁,而在開發的電腦上也已經安裝了 Silverlight ,對於測試 Silverlight 效果很方便,不過如果要回頭檢視沒有安裝的狀況就有點麻煩,很直覺的我們想到的作法是將 Silverlight 移除?
當然,我們不用這麼作,展開瀏覽器的「工具」選項,找到其中的「管理附加元件」項目,按一下,啟動設定對話方塊,如下圖:

找到其中的「Microsoft Silverlight」項目,將其選取,按一下右下角的「停用」按鈕,此時這個項目的狀態會從「已啟用」變成「已停用」,如下圖:


將其關閉之後,接下來就可以測試未安裝 Silverlight 的網頁效果了,例如我現在重新瀏覽 Silverlight 的官方網頁,如下圖,中間的區塊顯示要求安裝 Silverlight 的相關訊息。

Silverlight x ASP.NET 網站 N-Tier 設計 (3)

三層式架構中唯一可以接觸底層資料來源的便是資料層,這一層所使用的技術與是否利用 Silverlight 建構使用者介面沒有直接關係。資料庫系統早已發展的相當成熟術,因此可以連接資料庫並且進行資料存取的技術相當多, ADO.NET 搭配 SQL 敘述是最通用的組合,而近年物件關聯配置(Object Relation Mapping - ORM)技術逐漸發展成熟,也漸漸開始成為建構資料層的選擇性技術之一。

微軟支援 ORM 開發的工具有 LINQ to SQL 與 Entity Framework ,前者比較早發展出來,你可以將 LINQ to SQL 視為輕量級的 Entity Framework ,功能比較陽春,也因此具有比較出色的資料存取效率。如果想要徹底瞭解 ORM 相關技術,可以參考我們出版的「Entity Framework 與 LINQ 開發實戰」,從 LINQ 進入是不錯的學習方向。

到目前為止,我們對於透過 Silverlight 與 ASP.NET 開發RIA 可能運用的技術有了初步的認識,接下來,就可以選擇合適的技術來發展需要的系統了。我們最近在發展中的全新系統,由於沒有舊系統的負擔,直接採用了 Silverlight(展現層)+WCF RIA Services(商業邏輯層)+Entity Framework(資料層),此種組合的好處在於不需要撰寫代理程式來處理中間層與展現層溝通的問題,而 Entity Framework 則有完整的功能可以作到複雜的資料存取操作。

未來,我們將陸續釋出更多的文章,與大家分享我們在這一方面的經驗。

Good Luck

Silverlight x ASP.NET 網站 N-Tier 設計 (2)

相較於純粹的運用 ASP.NET 的網站,一旦導入了 Silverlight ,事情就沒有這麼簡單了,ASP.NET 將網頁送到瀏覽器之後,生命期就結束了,伺服器所要作的,就是等待 ASP.NET 的回應,然而對於 Silverlight 而言,它的生命這個時候才剛開始,它會隨時與使用者進行互動,並且需要即時與後端伺服器進行溝通,也因此 Silverlight 與 ASP.NET 的互動整合變得至為重要。

在三層式的架構中,Silverlight 與 HTML 負責建構展現層,這一部份會在瀏覽器執行,而商業邏輯層與資料層則會在伺服器端運作,如下圖:

[ASP.NET]


[Silverlight X ASP.NET]

 使用者在展現層所執行的資料存取編輯(CRUD)行為,均會透過中間層,也就是商業邏輯層反應給資料層,而資料層則負責真正的底層資料庫更新作業,而查詢之類的要求,也是由這一層取得所需的資料,透過中間層回應給展現層。


Silverlight 所提供的是即時互動的操作介面,因此使用者的動作必須能夠馬上得到回饋,在這種情形下,中間層的功能就非常重要。在 Silverlight 與 ASP.NET 技術構成的世界,我們可以利用幾種主要的服務來建構中間層以達到上述的目標,列舉如下:
  • ASMX Web Services
  • WCF
  • ADO.NET Data Services
  • WCF RIA Services
我們會在後續逐一討論這幾種不同的技術,不過請特別注意的是,只有最後一項 WCF RIA Services 是針對開發Silverlight此種 RIA 架構而設計的服務,它也是 Silverlight 4 才被正式導入,它當然不是全新的東西,從名稱來看,你應該能夠意識到它建立在 WCF 的基礎上,同時與ADO.NET Data Services 有關,只是將實作的過程包裝的更為方便,如果你有使用前述幾種服務的經驗,面對 WCF RIA Services 將會得心應手。

每一種服務,都能夠讓 Silverlight 與後端伺服器上的資料層進行溝通,其中最建議的方式當然是最新的 WCF RIA Services ,不過它有一些難度,上手不難,用到得心應手的話要下一些功夫修鍊,這一部份,我們會闢專文作進一步的說明。

下一篇介紹資料層的部份。

Silverlight x ASP.NET 網站 N-Tier 設計 (1)

這是一系列討論 Silverlight 網站 N-Tier 設計概念文章的第一篇,後續文章完成將陸續貼上來。

考慮效能因素,同時為了擴充與維護的彈性,網站在設計的時候,通常會透過 N-Tier 設計以分層的方式建立網站架構。最普遍的 N-Tier 設計是分成三層,列舉如下:
  • 展現層
  • 商業邏輯層
  • 資料層
「展現層」負責提供視覺化 UI ,而「商業邏輯層」則提供應用程式專屬的邏輯運算,最後的「資料層」則是包含底層資料來源與相關的資料存取功能。在實務設計上,還可以更進一步的細分,不過還是以此三層為原則。
我們曾經出版的「ASP.NET商業級資料庫網站開發實務」一書,針對如何將分層技術運用在 ASP.NET 網站的開發上作了完整的說明。幾年過去,Silverlight 已經來到了 4.0 ,原來以 HTML 為基礎的網頁展現層,現在則以 Silverlight 來取代,提供更先進的視覺化操作介面,當然,這意味著我們必需付出更多代價。

在純粹以 ASP.NET 開發的時代(其實還是不久之前),所謂的分層,是透過各種實作的類別來封裝所需的功能,再將這些類別分類歸納至不同的實體層,不過現在有了改變,由於 Silverlight 本身與 ASP.NET 是獨立運作的技術,因此必須導入其它技術將這兩者進一步與底層資料庫作整合,例如 EF 與 RIA Services 等等,這導致分層的實作更為複雜,儘管網站架構的分層原則不變。

當你開始將 Silverlight 技術運用在網站開發,會面臨如何在不同的層次運用適當的技術,因此我們接下來會談談,建立同時整合 Silverlight 與 ASP.NET 技術的網站時,相關技術所扮演的角色。

Windows Phone 7 X Silverlight

HTC 一口氣發表了 5 款 Windows Phone 7 手機,Samsung 也將推出使用 Windows Phone 7 作業系統的手機,在不久的未來, Windows Phone 7 機海將很快的淹沒智慧型手機市場, Windows Phone 7 開發大軍也將傾巢而出,而這中間的重頭戲當然就是 Silverlight 技術了。

WP7 直接支援 Silverlight ,微軟在這一方面亦提供了完整的開發支援,包含開發工具與相關的文件,你可以在以下的連結找到相關的資訊:

Windows Phone Development

以下的連結可以下載 WP7 開發工具: 

Windows Phone Developer Tools RTW

不過要特別注意的是,如果你想要開發 WP7 應用程式,必須先將作業系統升級至 Windows 7 ,Vista 也可以,就是不支援 Windows XP 。

NetBeans 7.0

NetBeans 目前的版本是 6.9 ,而 JDK 7 要到明年中旬以後才會發表,因此 NetBeans 在 JDK 7 正式版釋出前的最版本只能命名為 6.10 ,儘管這還蠻合理的,不過仔細想一下實在有點詭異,以數學十進位而言, 6.10 應該進位變成 7.0 才對,但是如此一來又與目前的 JDK 版本不符。

NetBeans 開發小組為了解決這個問題,的確重新將 NetBeans 升級為 7.0 了,所以接下來最新版本的正式名稱為 NetBeans 7.0 ,而為了與 JDK 同步,亦同時支援了 JDK 7 的語法以及 JDK Beta 功能。有興趣的讀者可以參考以下的連結:

Important Message: NetBeans 6.10 Changes to NetBeans 7.0

在這篇文章中提及比較重要的時程如下:
  • 2011/03:NetBeans 7.0,支援 JDK 7 語法與 Beta 功能。
  • 2011/秋:NetBeans 7.1,支援 Client Java 與 JavaFX Java APIs。

Silverlight 4、DomainDataSource 與 WCF RIA Services(1)

** 所有截圖點一下可放大 **
WCF RIA Services 讓跨越網路的多層式 Silverlight 應用程式開發變得容易,DomainDataSource 接受 WCF RIA Services 所提供的服務,透過 Silverlight 介面進行伺服器端的資料維護操作。 WCF RIA Services 建立在 WCF 的基礎之上,但是簡化了實作的過程,如果你在 Silverlight 4 之前的版本有使用 WCF 的經驗,會發現接下來的過程相對簡單許多。開啟 Visual Studio 2010 ,新增一個「Silverlight Business Application」專案,並且圖留其預設名稱「BusinessApplication」,如下圖:

完成上述的步驟之後,接下來就可以看到方案設計畫面如下:


要特別注意「方案總管」,其中有兩個專案,分別別是「BusinessApplication1」與「BusinessApplication1.web」,前者是 Silverlight 的部份,後者以 web 為名稱字尾的則是 ASP.NET。接下來,我們分別要建立所需的 Entity Framework 資料物件以及 WCF RIA Services 的 Domain 服務,都是在 ASP.NET 專案中進行。於「BusinessApplication1.web」專案加入新增項目,於對話方塊中,選擇「資料 > ADO.NET 實體資料模型」,按一下「新增」按鈕,完成新增料模型的動作。

「ADO.NET 實體資料模型」細節的部份,請參考我們的著作《Entity Framework 與 LINQ 開發實戰》,最後建立一個連接 SQL Server 中儲存學生資料表 kt_Students 的 edmx 檔案,如下圖:

繼續接下來的步驟之前,先重新建置方案,完成之後,緊接著在「BusinessApplication1.web」加入另外一個新增項目,如下圖,選擇「Web > Domain Services Class」,按一下「新增」按鈕,開始一連串的設定。

接下來的畫面是加入新的 Domain service 類別對話方塊,你會看到其中出現先方才建立的資料實體物件 kt_Students ,將其勾選,按下 OK 按鈕,即可完成設定。

到這個步驟,我們便完成了 ASP.NET 部份所需的設定了,其中資料實體物件會負責串接資料庫連線,而 Domain Service 類別則提供支援 Silverlight 前端作業所需的功能。現在來看看方案總管,其中的「BusinessApplication1.web」專案裏面,多了一個 DomainService1.cs 以及 Model1.admx 這兩個檔案。

下一篇文章,我們將建立 Silverlight 介面,利用這裏所設定的服務與資料實體物件,取得 SQL Server 的特定資料表內容。

Silverlight 的資料來源控制項

特別是熟悉 ASP.NET 的開發人員, 對於要轉換至 Silverlight 領域一個最大的障礙在於,Silverlight 本身並沒有辦法如同 ASP.NET 那麼方便的資料控制項可用。不過,現在情形改觀了,你可以透過 DomainDataSource 來完成資料來源的聯繫作業,透過此控制項的設定,我們可以快速的在 Silverlight 介面上建立資料的展示,甚至過濾、分頁以及排序等基礎功能。

當你開啟 Silverlight 的 xaml 檔案編輯畫面,在工具箱裏面可以找到這個控制項如下圖(點圖可放大):


在 .xaml 檔案的視覺化編輯模式中,將 DomainDataSource 控制項直接拖曳至畫面上-如下圖(點圖可放大),即可接受預先設定好的 WCF RIA Services 資料來源,完成伺服器端的資料繫結作業。


下一篇,我們再來看看如何設進行設定工作。

Silverlight 4 開發與專案結構 - ASP.NET 開發人員移轉初步

以 HTML 網頁為基礎的使用者操作介面,早已無法應付目前網路應用的發展,Ajax 即是為了改善此種狀況而發展出來的技術。然而,無論在開發或是使用上,Ajax 搭配 JavaScript 控制網頁元素的作法,實作具備高度互動特性的複雜操作介面依然是非常大的挑戰,而全新改良的 HTML 5 還有一段很長的路要走,因此目前 Silverlight 4 即成了我們發展 RIA 的唯一選擇。如同 JavaScript 搭配 HTML 網頁的 Ajax ,Silverlight 本身是在瀏覽器執行的應用程式,因此對於想要移轉至 Silverlight 發展的 ASP.NET 開發人員來說,釐清 ASP.NET 與 Silverligtht 在架構上的差異,與瞭解它們之間的整合是首要之務。

ASP.NET 在 Sever 端將所有的工作處理完畢之後,再送到瀏覽器,而使用 Silverlight 技術的網頁,則是相關的檔案被送至瀏覽器之後,才開始執行,因此,我們可以將這兩種技術切割來看(點圖可放大):


有了初步的認識之後,現在我們切換至 Visual Studio 來看看。有幾種與 Silverlight 有關的專案樣板可供建立 Silverlight 專案,我們以最典型的 Silverlight 應用程式專案為例,如下圖(點圖可放大):


這是 Silverlight 應用程式專案的建立畫面,選擇第一種專案,然後按一下確定按鈕,接下來的選項對話方塊接受預設值,完成之後出現的專案結構如下(點圖可放大):


如你所見,不同於 ASP.NET ,在預設的情形下,Visual Studio 會將其切割成為兩個專案,ASP.NET 的部份則於專案名稱加上一個  Web  字尾。而上述圖示中所提及的  WCF RIA Services 與 Entity Framework 等相關檔案,均必須設定於 Web 專案,而 Silverlight 專案則透過引用  Web 專案命名空間,建立相關的類別實體來達到伺服端資料存取的目的。

除了引用 Web 專案命名空間,接下來 Silverlight 的開發與視窗程式無異,另外,由於其強悍的 UI 設計功能,可以讓你建構超越傳統視窗介面的 Web 應用程式。

網誌存檔