【发布时间】:2011-11-07 15:19:17
【问题描述】:
我正在开发一个 WPF 客户端,它与使用 NHibernate 将数据保存在数据库中的 WCF Web 服务进行交互。
客户端将对 UI 使用 MVVM 设计模式,并通过发送和接收 DTO 与 WCF 服务进行交互。
据我了解,View-Model 中应仅包含演示数据和逻辑,而 Model 应包含应用程序的数据和业务逻辑。
现在让我们以客户端中的登录屏幕为例。
- 视图将代表登录屏幕本身,其数据上下文将是视图模型。
- View-Model 将保存 Model 的一个实例,并通过实现 INotifyProperty 接口来更新 View。
这是我的问题:模型中究竟应该包含什么?
它是否应该使用诸如 MEF 之类的依赖注入容器来保存对 WCF 代理接口的引用?
基本上,用户将输入用户名和密码,由于数据绑定,这将更新视图模型中的属性。每当用户按下视图上的“登录”按钮时,都会向视图模型发送一个命令,视图模型又将其转发给模型。然后模型使用代理接口与 WCF Web 服务进行通信。
这种方法正确吗?如果不是,那么 Model 和 View-Model 中究竟应该包含哪些内容?
【问题讨论】:
-
为什么 View-Model 会得到视图的实例?
-
视图是否应该改为获取 VM 的实例..?我见过许多 MVVM 模式的实现,或者 VM 有 View 的实例,反之亦然。您将如何实施该模式?换句话说,我应该创建 View 并注入 VM,还是应该创建 VM 并注入 View ?
-
视图将 View-Model 作为 DataContext。所以 View 知道 ViewModel。通常你不需要知道来自 ViewModel 的视图。如果 ViewModel 获得了 View 的一个实例,你可能会有一个紧耦合
-
明白,谢谢。因此,创建视图的新实例并显示它也会创建 View-Model 的实例,因为它是数据上下文。 View-Model 是否应该持有 Model 的实例?
标签: .net wcf web-services mvvm wcf-client