如何使用WCF实现MVVM?

时间:2011-10-02 19:59:30

标签: mvvm

我是MVVM的新手。目前我正在用C#开发一个具有SQl Server后端的WPF项目,我将使用标准的WCF服务与之通信。到目前为止,我在MVVM上看到的所有教程似乎总是使用一些静态数据存储库,例如xml文件作为后端。我还没有看到使用数据库和数据访问层的实现,所以我对我的WCF服务适合的位置感到困惑。服务中定义了所有数据对象,那么服务本身就变成了模型?此外,我如何在ViewModel中包含服务,以便设计者不会抛出错误声明它无法创建服务类的实例?这里的任何帮助都会非常感激,因为我觉得很奇怪,关于这个主题的很多教程都省略了业务线应用程序的最实用的实现。

PS我想避开WCF RIA服务和Silverlight,因为Silverlight缺乏对命令的支持使得我正在关注的书(使用Model-View-ViewModel的Pro WPF和Silverlight MVVM有效应用程序开发)难以理解

1 个答案:

答案 0 :(得分:11)

好的,我会尽力让你加快速度......

首先,我确实认识到有关模型和使用WCF公开的对象模型的问题。它们是一样的吗?嗯,为了简单起见,我现在想做出这个假设。那么我们在客户端不需要MVVM的模型部分吗?取决于......

ViewModel处于驾驶席位。我们让它为您的WCF服务创建客户端代理。请求中使用并作为结果返回的对象构成了您的模型。您想要在客户端缓存或不能直接与UI绑定的任何内容都将放在模型容器类的属性中。从这些模型属性生成可绑定属性,以便在UI中使用。其他所有内容都只是视图模型中的直接属性。

关于WCF和数据访问层,有一些重要的事情要识别。首先,您需要在逻辑(信息)模型和物理(数据库)模型之间进行分离。一个原因是将数据库技术从应用程序中抽象出来。另一个允许应用程序/域逻辑与物理实现之间存在小的偏差。确保您的(实体)模型类足够通用,以支持UI中的更改,而无需为每次UI更改修改完整的应用程序堆栈。

如果没有一个明确的例子,很难谈论这件事,所以总结一下,我想邀请你看看http://aviadezra.blogspot.com/2010/10/silverlight-mvvm-odata-wcf-data.html。我知道,它使用的是WCF数据服务和SilverLight。不要因为直接指向这个样本而直接向我发疯,并给我拇指向下。这是一个非常好的例子,说明你想要实现什么,介绍什么以及如何设置这样的应用程序。只需通过常规类型数据合同替换WPF和数据服务Silverlight,故事的其余部分将有助于让您的想法清晰。

希望它可以帮助你完成任务!