什么应该进入模型和视图模型?

时间:2011-08-31 13:42:31

标签: .net wcf web-services mvvm wcf-client

我正在开发一个与WCF Web服务交互的WPF客户端,它使用NHibernate在数据库上保存数据。

客户端将使用MVVM设计模式,并通过发送和接收DTO与WCF服务进行交互。

根据我的理解,只有表示数据和逻辑应该放在View-Model中,而Model应该包含应用程序的数据和业务逻辑。

现在让我们使用客户端中登录屏幕的情况。

  • View将代表Login屏幕本身,其数据上下文将是View-Model。
  • View-Model将包含Model的一个实例,并将通过实现INotifyProperty接口来更新View。

以下是我的问题:模型究竟应该包含哪些内容?

它是否应该使用依赖注入容器(如MEF)来保存对WCF代理接口的引用?

基本上,用户会输入用户名和密码,这会因数据绑定而更新视图模型中的属性。每当用户按下视图上的“登录”按钮时,命令就会发送到视图模型,然后视图将模型转发给模型。然后,该模型使用Proxy接口与WCF Web服务进行通信。

这种做法是否正确?如果没有,究竟应该在模型和视图模型中进行什么?

3 个答案:

答案 0 :(得分:2)

MVVM中的ViewModel是classic MVC中ApplicationModel和Controller的组合。因此,它负责连接服务以查询要显示的数据并调用对服务的操作。

工作流程应该是这样的:

  1. 创建LoginViewModel并获取WCF服务的句柄(理想情况下,您应该使用DI将WCF服务注入ILoginService)
  2. 用户输入绑定到VM上相应属性的用户名和密码,然后单击绑定到VM上委托命令的登录名。
  3. 在命令处理程序中,VM运行验证(例如,确保已设置用户名和密码)
  4. VM调用ILoginService上的LoginUser传递用户名和密码(调用WCF服务上的操作。
  5. 模型不应该知道服务等。从技术上讲,您在客户端使用纯DTO,因此它应该具有最小的逻辑,在服务背后,应该有一个更丰富的模型,它具有业务逻辑和验证。

答案 1 :(得分:1)

如果你检查Karls Shiffletts blog,你会找到一张关于MVVM-Layers的好图表 我会说你的实现对我来说没问题。

这取决于您的实现,最有可能的是您将切换ViewModel并为ViewModel提供DataTemplate(View)。此CodeProject链接显示了一个很好的实现:Creating an Internationalized Wizard in WPF

答案 2 :(得分:1)

除了验证数据之外,

Models不应包含数据访问或任何业务逻辑。它们是数据对象,应该只包含数据和验证。

您的ViewModels负责运行您的应用程序,这包括填写数据对象(模型),更改它们,保存/删除它们,并将它们(以及其他相关属性)提供给{{1 }}

如果您有兴趣,我有一个简单的MVVM示例here。最上面有一个定义,定义ViewModel相比应该进入的内容

相关问题