2011-10-02 54 views
4

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

PS我想避开WCF RIA服务和Silverlight,因为Silverlight缺乏对命令的支持,使得我很难遵循(WPF和Silverlight MVVM高效应用开发与Model-View-ViewModel)理解。

+1

如果您是MVVM模式的新手,它可能会帮助您阅读有关如何创建代码片段的文章:http://rafapef.blogspot.com/2012/11/CodeSnipetInVisualStudio2012.html因为很可能您必须在upcomming viewmodels中输入许多属性。我希望它有帮助。 –

回答

10

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

首先,我确实认识有关模型,并与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,其余的内容将有助于清晰地理解你的想法。

希望它可以帮助你在你的追求!