簡體   English   中英

Silverlight 4 WCF RIA服務和MVVM並不那么簡單

[英]Silverlight 4 WCF RIA Services and MVVM is not as simple

[免責聲明:我是ASP.NET MVC開發人員]

嗨,

我正在尋找一些在Silverlight 4中使用WCF RIA實現MVVM模式的最佳實踐。

我不打算使用IoC的MEF來定位我的ViewModel。 我想知道的是如何在Silverlight 4和WCF RIA中應用MVVM模式。

我不想使用像Prism或MVVM Light工具包這樣的其他東西。 我在互聯網上發現了許多例子,展示了如何在視圖上拖放數據源並完成工作(這讓我想起了我的第一個VB6開發)。

我試圖用WCF RIA實現MVVM,它根本不是很明確的。 如果我理解,MVVM應該包含所有邏輯,以便單獨測試它,但是當它與WCF RIA結合時,它是另一個故事。 我有以下問題。

  1. 我可以使用生成的元數據作為模型嗎? 如果我從頭開始寫所有內容會更容易使用它。

  2. 我看到了獲取數據的唯一方法是通過DomainContext或通過視圖中的直接綁定(本地資源)。 我不希望視圖中的直接綁定,根本不可測試。 另一方面,我不能使用DomainContext,它不暴露任何單個實體! 我所擁有的只是可以綁定到datagrid的EntitySet。 如何從ViewModel將單個實體綁定到DataForm?

  3. 如何將模型更新到數據庫?

  4. 如何從一個實體導航到其項目的集合。 例如,如果我有公司實體,我想顯示一個DataForm來更新實體信息,並顯示一個數據網格來顯示公司的地址。 保存表單時,我希望將信息保存到公司,並提供有關選擇哪個地址為活動狀態的信息。

請幫助我了解如何做得好。 或者也許我應該放棄WCF RIA並從頭開始使用WCF?

你怎么看 ?

您可能對此會話感興趣。 它解釋了如何將MVVM模式與RIA WCF服務一起使用。

一些隨機答案......

我不認為MEF特別適合Silverlight。 它主要用於桌面應用程序,並且可以適用於插件位於相對於應用程序的本地文件系統中的其他用途。

MVVM要求您了解角色。 “視圖”是您的XAML和代碼隱藏。 代碼隱藏應該處理來自用戶控件的事件,但更多的是。

ViewModel保存用戶控件將綁定到的數據。 通常,ViewModel綁定到View作為其DataContext,因此表單中的所有內容都可以數據綁定到ViewModel中的屬性。 ViewModel必須實現INotifyPropertyChanged,並為表單數據綁定到的每個屬性引發屬性更改事件。

您可能希望使用EntitySet作為源來創建ObservableCollection。 這將處理INotifyCollectionChanged以進行數據綁定。 如果EntitySet中的實體也處理INotifyPropertyChanged,那么您在集合的數據綁定方面處於良好狀態。

您可以為單個實體創建屬性,並將其數據綁定到該實體,假設還實現了更改通知(實體成員和實體屬性)。

RIA Services將在每次構建時重新生成DomainContext,這有助於保持同步。 但是,它應該是ORM上方的服務層,因此您的ORM或其他數據映射仍然必須通過其他方式進行維護。

我沒有看過RIA Services的最終版本,但我對beta版本並沒有留下太深刻的印象。 我寧願在服務器上定義好的實體類,並與Silverlight項目共享它們。 但是,設置並不容易,並且需要一些不依賴於服務引用的非平凡WCF。 (RIA Services最終版本可能已經清理了一些,但Silverlight中的本機WCF服務引用非常惡劣,主要是因為它不會自動重新創建生成的類,並且它會對服務器端服務的URI進行硬編碼。)

元數據是RIA Services beta的另一個問題。 如果您控制實體源,則更容易將元數據屬性直接附加到DataContract類和單個DataMember屬性。 同樣,這可能意味着不使用RIA服務。 如RIA beta所要求的那樣編寫單獨的元數據類並不是一個好的解決方案。

我最終沒有使用RIA服務Silverlight 3,並沒有后悔。 這是關於WCF和Silverlight優秀文章 雖然它說Silverlight 2,但它仍然適用於任何Silverlight版本。

我推薦MVVM Light。 Codeplex上有源,如果這是一個問題。 它提供消息傳遞和命令支持,以及ViewModelLocator; 雖然后者需要做一些工作才能理解,但它確實是對基本MVVM模型的一個很好的擴展。

希望這可以幫助.....

我想我會告訴你一個我正在研究的項目 - 剛剛完成我們的第一個版本。 提供了一種非常簡單的方法來專門處理Silverlight + RIA服務的MVVM。 簡化了很多MVVM的東西,並在Notifications類中提供了一些類似控制器的函數。 http://slmvvms.codeplex.com/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM