.net 模型和视图模型应该包含哪些内容?

.net 模型和视图模型应该包含哪些内容?,.net,wcf,web-services,mvvm,wcf-client,.net,Wcf,Web Services,Mvvm,Wcf Client,我正在开发一个WPF客户端,它与使用NHibernate在数据库上持久化数据的WCFWeb服务交互 客户端将为UI使用MVVM设计模式,并通过发送和接收DTO与WCF服务交互 据我所知,视图模型中应该只有表示数据和逻辑,而模型应该包含应用程序的数据和业务逻辑 现在让我们以客户端中的登录屏幕为例 视图将表示登录屏幕本身,其数据上下文将是视图模型 视图模型将保存模型的实例,并通过实现INotifyProperty接口来更新视图 我的问题是:模型中到底应该包含什么 它是否应该使用依赖项注入容器(如

我正在开发一个WPF客户端,它与使用NHibernate在数据库上持久化数据的WCFWeb服务交互

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

据我所知,视图模型中应该只有表示数据和逻辑,而模型应该包含应用程序的数据和业务逻辑

现在让我们以客户端中的登录屏幕为例

  • 视图将表示登录屏幕本身,其数据上下文将是视图模型
  • 视图模型将保存模型的实例,并通过实现INotifyProperty接口来更新视图
我的问题是:模型中到底应该包含什么

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

基本上,用户将键入用户名和密码,这将由于数据绑定而更新视图模型中的属性。每当用户按下视图上的“登录”按钮时,都会向视图模型发送一条命令,视图模型又会将该命令转发给模型。然后,该模型使用代理接口与WCF Web服务通信

这种方法正确吗?如果没有,模型和视图模型中到底应该包含什么?

如果您进行检查,您将找到一个关于MVVM层的良好图表。
我想说你的实现在我看来还不错

这取决于您的实现,最可能的情况是您将切换ViewModel并为ViewModel创建一个数据模板(视图)。此CodeProject链接显示了一个良好的实现:

如果您进行检查,您将找到一个关于MVVM层的良好图表。
我想说你的实现在我看来还不错


这取决于您的实现,最可能的情况是您将切换ViewModel并为ViewModel创建一个数据模板(视图)。此CodeProject链接显示了一个良好的实现:

模型
除了验证其数据之外,不应包含数据访问或任何业务逻辑。它们是数据对象,应该只包含数据和验证

您的
ViewModels
负责运行您的应用程序,这包括填充数据对象(模型)、修改它们、保存/删除它们,以及向
视图提供它们(和其他相关属性)


如果您感兴趣,我有一个简单的MVVM示例。顶部有一个定义,定义了与
ViewModel
模型相比,
模型
除了验证其数据之外,不应包含数据访问或任何业务逻辑。它们是数据对象,应该只包含数据和验证

您的
ViewModels
负责运行您的应用程序,这包括填充数据对象(模型)、修改它们、保存/删除它们,以及向
视图提供它们(和其他相关属性)


如果您感兴趣,我有一个简单的MVVM示例。最顶层有一个定义,定义了与
视图模型相比
模型中应该包含的内容。MVVM中的视图模型是中的应用程序模型和控制器的组合。因此,它负责连接到服务以查询数据以显示和调用针对服务的操作

工作流应该是这样的:

  • LoginViewModel被创建并获得WCF服务的句柄(理想情况下,您应该使用DI将WCF服务作为ILoginService注入)
  • 用户输入绑定到VM上相应属性的用户名和密码,然后单击绑定到VM上委托命令的登录
  • 在命令处理程序中,VM运行验证(例如,确保已设置用户名和密码)
  • VM通过传递用户名和密码(调用WCF服务上的操作)在ILoginService上调用LoginUser

  • 模型不应该意识到服务等。从技术上讲,您在客户端使用纯DTO,因此它应该具有最小的逻辑,在服务背后,应该有一个更丰富的模型,具有业务逻辑和验证。

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

    工作流应该是这样的:

  • LoginViewModel被创建并获得WCF服务的句柄(理想情况下,您应该使用DI将WCF服务作为ILoginService注入)
  • 用户输入绑定到VM上相应属性的用户名和密码,然后单击绑定到VM上委托命令的登录
  • 在命令处理程序中,VM运行验证(例如,确保已设置用户名和密码)
  • VM通过传递用户名和密码(调用WCF服务上的操作)在ILoginService上调用LoginUser

  • 模型不应该知道服务等。从技术上讲,您在客户端使用纯DTO,因此它应该具有最小的逻辑,在服务背后,应该有一个更丰富的模型,它确实具有业务逻辑和验证。

    为什么视图模型会获得视图的实例?视图是否应该获得VM的实例。.?我见过许多MVVM模式的实现,VM有一个视图实例,反之亦然。您将如何实现该模式?换句话说,我应该创建视图并注入VM,还是应该创建VM并注入视图?视图将视图模型作为DataContext。因此,视图了解该视图模型。通常您不需要从ViewModel中了解视图。如果ViewModel获得inst