2010-04-28 84 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/