Web Services是經實踐考驗證明的跨防火牆的通信方式,它很穩定且被廣泛認可。總的來說你需要為分散的CRUD操作指定相應的接口并在Silverlight中忠實的調用他們
使用的原因:需要進行類似直接通過服務進行資料庫互動操作的項目(弱化業務邏輯部分)。
避免使用的原因:必須始終自己監視資料的變化并調用相應的服務方法進行更新,任何需要并發的操作或事務變得較為沉重且需要處理大量的代碼。
ADO.NET Data Services是一套簡單的基于Rest的資料通信方式。它依賴于Http定義服務接口,如Get操作定義為讀寫、Post操作定義為更新等。它使用ATOM或JSON作為序列化格式,是以可以被各種類型的用戶端調用。
他通過将基于URI的API轉換為LINQ調用進而提供插入、更新、删除等操作。這意味着ADO.NET本身是很單薄的一層,它的目的是将URI模型翻譯為資料通信代碼。
對于Silverlight來說,ADO.NET Data Services真正的亮點在于其提供的用戶端類庫。這個用戶端類庫允許開發者在用戶端使用LINQ查詢并在服務端執行。當然它支援的LINQ文法相比服務端有一些局限,大概覆寫80%的場景,當然ADO.NET Data Service也允許開發者在必要時自定義剩餘的操作以适應其他場景。另外,用戶端類庫提供一個強大的Data上下文類用以監視和處理有事務支援的批量操作。
使用ADO.NET Data Services公開資料通信實際上是宮公開查詢終結點的方式替代定義接口,這就是它最特别的地方。比如,我們可以像這樣使用LINQ查詢
// Silverlight 代碼
// 使用 LINQ 建立擦汗尋
var qry = (from g in ds.Games
where g.Price < 50m
orderby g.Name
select g) as DataServiceQuery<Game>;
// 執行查詢
qry.BeginExecute(new AsyncCallback(r =>
{
games2.ItemsSource = qry.EndExecute(r).ToList();
games2.DisplayMemberPath = "Name";
}), null);
使用的原因:想要一個簡單、安全的模型使得開發人員可以在代碼中定義他們需要的查詢(相對于基于接口的WCF Service)。得益于LINQ調用及上下文類,使用ADO.NET Data Services用戶端類庫會讓你的用戶端代碼量适當減少。
避免使用的原因:當你想要嚴格控制資料通路接口及不想讓可發者直接在用戶端使用LINQ查詢的情況下應該避免使用ADO.NET Data Services。
<a href="http://images.cnblogs.com/cnblogs_com/024hi/201106/201106231712561085.png"></a>
RIA Services基于這樣的思想:在服務端建立資料通信API同時在Silverlight中生成相應的用戶端代碼。它的着重點在于服務端和用戶端共享代碼(包括驗證邏輯等)。另外他還允許開發者建立一系列接口,并且同樣在用戶端提供上下文對象在用戶端監視資料(包括批量操作)的變化并回報給服務端。從某種程度上來說,RIA Services是Web Services和ADO.NET Data的集大成者。
由于RIA Services基于服務端查詢接口定義,在用戶端開發人員可以像這樣調用其接口定義的查詢:
// Silverlight代碼
// context 對象監視資料變化
XBoxGamesContext ctx = new XBoxGamesContext();
// RIA 查詢,基于接口
var qry = ctx.GetGamesByGenreQuery("Shooter");
// 綁定資料
theList.ItemsSource = ctx.Load<Game>(qry).AllEntities;
在介紹ADO.NET Data Services時曾提到開發人員可以使用LINQ查詢,RIA Services同樣允許向查詢終結點添加LINQ 限制。例如你可以這樣對終結點添加LINQ表達式:
var riaQry = ctx.GetGamesQuery()
.Where(g => g.Price < 50m)
.OrderBy(g => g.Name);
LoadOperation<Game> op =
ctx.Load<Game>(riaQry);
使用的原因: RIA Services可以有力的減少應用程式層級數量,尤其适用于需要快速反應的應用程式開發場景。RIA Service同時提供了像WebService那樣基于接口的支援及像ADO.NET Data Services中基于LINQ查詢的支援。
避免使用的原因:RIA Services中利用了很多系統自動生成的代碼,調試時可能會碰到麻煩。
那麼你的選擇是?歡迎讨論~
本文轉自紫色永恒部落格園部落格,原文連結: http://www.cnblogs.com/024hi/archive/2011/06/23/2088295.html,如需轉載請自行聯系原作者