如何确保所有模型都可以访问服务代理?

时间:2012-07-10 13:20:00

标签: wpf wcf mvvm model

我在MVVM架构中有一个WPF客户端。

WPP客户端需要连接到WCF服务,并向其发送操作。

这种能力需要来自不同的视角,因此意味着不同的模型(对吧?)

的问题:

  1. 我的假设是,模型是访问WCF服务客户端的人 - 是否正确?含义 - 我们不希望视图或模型视图连接到WCF服务,对吧?只有模特本身......
  2. 如何确保所有模型都可以访问WCF服务的客户端?我使用某种'ServiceLocator'吗? (我已经在某个地方读过这个术语,但是不知道它究竟意味着什么。如果以前做过这个的人可以对这个话题有所了解,那会很高兴。)

2 个答案:

答案 0 :(得分:1)

  1. 模型表示数据,因此ViewModel应该了解服务
  2. 只需将IMyWcfService作为任何ViewModel的依赖项,以实现您可以使用受保护的构造函数创建ViewModelBase抽象类,该构造函数接受IMyWcfService,因此所有具体的ViewModel都有义务提供这项服务
  3. 正如评论中已经说明的那样 - 尽量避免使用服务定位器,这会破坏API和单元测试。只需提供所有依赖项作为构造函数参数,这样就可以使类API更加清晰,这样您就可以看到所需的内容,而不必担心“服务定位器无法解析服务”等运行时错误

答案 1 :(得分:1)

我个人认为Models不应该只是容器数据的普通容器对象。它们不应包含数据访问代码或除基本数据验证之外的任何其他应用程序逻辑,以验证其数据完整性。

您的ViewModels应该是负责与WCF服务器通信的人。或者更好的是,创建一个包含所有数据访问调用的存储库类,并让ViewModel使用它。

不要忘记,使用MVVM,您的ViewModels 是您的应用程序。它们负责从应用程序流,业务逻辑到数据访问的所有内容(尽管有时这些概念是从VM中抽象出来的,例如使用Repository进行数据访问)。

Views只是一个用户友好的界面,位于ViewModel之上,允许用户与它们进行交互,而Models只是用于包含数据的对象。