1

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

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

这种能力需要来自不同的观点,因此意味着不同的模型(对吗?)

问题:

  1. 我的假设是模型是访问 WCF 服务客户端的模型吗?含义 - 我们不希望视图或模型视图连接到 WCF 服务,对吗?只有模型本身...
  2. 如何确保所有模型都可以访问 WCF 服务的客户端?我是否使用某种“ServiceLocator”?(我在某处读过这个词,但不知道它的确切含义。如果以前做过这个的人能对这个话题有所了解,我会很高兴)。
4

2 回答 2

1
  1. Model 代表一个数据,所以 ViewModel 应该知道服务
  2. 只需将 aIMyWcfService作为任何 ViewModel 的依赖项,您就可以ViewModelBase使用受保护的构造函数创建抽象类,该构造函数接受IMyWcfService,因此所有具体的 ViewModel 都有义务提供此服务

正如评论中已经说明的那样 - 尽量避免使用服务定位器,这会弄乱 API 和单元测试。只需将所有依赖项作为构造函数参数提供,这将使类 API 更加清晰,因此您将看到所需的内容,而不必担心诸如“服务定位器无法解析服务”之类的运行时错误

于 2012-07-10T13:39:56.687 回答
1

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

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

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

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

于 2012-07-10T13:40:04.800 回答