坚持MVVM架构问题

时间:2010-12-16 04:26:34

标签: silverlight mvvm

我正在使用MVVM模式构建一个silverlight应用程序,但我不明白我在这里缺少什么......

  1. ViewsProject(Silverlight应用程序)包含用户控件和页面。参考ViewModelsProject。
  2. ViewModelsProject(Silverlight类库)包含后端视图代码。业务逻辑也将驻留在这里。它将参考模型项目。

  3. ModelsProject(Windows类库)包含:本地数据库的Ado.net实体模型和基于实体模型构建的WCF RIA DomainService。它的目的是从本地数据库获取数据,并通过域服务公开实体。

  4. Web项目:包含ViewsProject的xap。

  5. 到目前为止,我做的一切都是正确的吗?如果是,请帮助我理解:

    如何调用方法     ViewsModel中的域服务     项目?如果我参考了     ModelsProject,我得到的错误     只有silverlight项目才可以     添加。     如果我将ModelsProject更改为a     silverlight类库项目     然后我无法添加实体模型     我的数据库。

3 个答案:

答案 0 :(得分:1)

要使客户项目使用WCF RIA服务,您需要在项目属性中设置WCF RIA服务链接。

关于使用WCF RIA服务时项目架构中的模块化和分离, 您可以使用WCF RIA类库。

alt text

答案 1 :(得分:0)

将您的观点与您的视图模型IMHO分开没有多大意义。我之前看过这种方法,但视图模型(至少在我看来)代表了一种比域模型所能提供的更“适合视图”的数据抽象。 ViewModel提供了一个间接层,允许在没有模型执行相同的情况下更改表示,但它只是一种适配器/控制器混合,并且与视图一起存在。

尽管回答你的问题......

通常情况下,您可以通过从视图命令到视图模型来让SL项目调用域服务(通常是Web服务)。然后,viewmodel命令将直接或间接进行Web服务调用。此Web服务需要成为SL类库,因为它位于远离客户端的Web服务器上。

我在这里感受到您对桌面应用的看法。请记住,SL项目运行客户端,而您的数据不存在。要连接所有这些,你需要一些远程服务来获取数据。由于数据不在客户端上,因此常规库引用并不好。

HTH,Stimul8d

答案 2 :(得分:0)

我找到了答案。

将ViewModelsProject(Silverlight类库)更改为Silverlight应用程序类型。 在创建项目期间选中启用Ria服务。

在视图模型类中,使用ModelsProject添加。 编译ViewModelsProject。

然后,WCF Ria服务的所有方法都将出现在代码中。