2010-04-28 51 views
8

[免責聲明:我ASP.NET MVC開發者]Silverlight 4的WCF RIA Services和MVVM不是那麼簡單

嗨,

我在尋找與實施MVVM模式的最佳實踐與WCF RIA在Silverlight 4中。

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

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

我試圖用WCF RIA實現MVVM,它根本就不是直接的。如果我明白了,MVVM應該包含所有的邏輯,以便單獨對它進行單元測試,但是當它將它與WCF RIA結合時,這是另一回事。我有以下問題。

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

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

  3. 如何將模型添加到數據庫?

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

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

您認爲如何?

回答

9

您可能也對這個session感興趣。它解釋瞭如何在RIA WCF服務中使用MVVM模式。

+0

肯定會推薦看樣品從這篇文章「BookClub」代碼。從中學到很多 – 2010-07-16 04:20:54

4

一些隨機的答案...

我不認爲這是MEF particuarly非常適合的Silverlight。它主要用於桌面應用程序,並且可以用於其他插件位於本地文件系統相對於應用程序的其他用途。

MVVM要求您瞭解角色。 「視圖」是您的XAML和代碼隱藏。代碼隱藏應該處理來自用戶控件的事件,但僅此而已。

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

您可能想創建一個ObservableCollection,使用EntitySet作爲源代碼。這將處理INotifyCollectionChanged用於數據綁定的目的。如果EntitySet中的實體也處理INotifyPropertyChanged,那麼您對集合的數據綁定狀況良好。

假設實現了更改通知(實體成員和實體屬性),您可以爲單個實體和數據綁定創建屬性。

RIA Services將在每個版本上重新生成DomainContext,這有助於保持同步。它的目的是成爲ORM上方的服務層,因此您的ORM或其他數據映射仍然需要通過其他方式進行維護。

我還沒有看過RIA服務的最終版本,但是我對測試版本的印象不是很深。我寧願在服務器上定義好實體類,然後與Silverlight項目共享它們。然而,設置起來並不容易,並且需要一些不依賴於服務參考的非平凡WCF。 (RIA Services最終版本可能已經清除了其中的一部分,但Silverlight中的本地WCF服務引用非常不好,主要是因爲它不會自動重新創建生成的類,並且它會對服務器端服務的URI進行硬編碼)

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

我結束了不使用RIA服務的Silverlight 3,並沒有後悔。這是一個excellent article on WCF and Silverlight。雖然它說Silverlight 2,它仍然是任何Silverlight版本的目標。

我確實推薦MVVM Light。如果這是一個問題Codeplex上的源可用。它提供消息和命令支持,以及ViewModelLocator;而後者需要一點工作才能理解,這對於基本的MVVM模型來說確實是一個很好的擴展。

希望這有助於.....

+0

使用MVVM和WCF RIA也有很好的運行業務應用程序示例。看看這裏:http://intersoftpt.wordpress.com/2010/06/29/clientui-part-5-the-supercharged-silverlight-navigation/ – 2010-07-04 09:36:18

2

只是想我會讓你知道一個項目,我的工作 - 只是得到了我們的第一個版本完成。爲專門針對Silverlight + RIA Services的MVVM提供了一種非常簡單的方法。簡化了很多MVVM的東西,並通過Notifications類提供了更多類似控制器的功能。 http://slmvvms.codeplex.com/