2010-08-30 78 views
7

我打算首次在MVVM模式之后编写一个WPF应用程序,但有些东西对我来说不太清楚。比方说,视图有一个“保存”按钮,当它被击中时,我需要保存我的数据(模型)的当前状态。这将通过向SOAP服务发送SOAP消息来完成。WPF MVVM服务层

在我的MVVM设置中,这些SOAP请求/响应处理程序的位置在哪里?只要保存按钮被击中,视图模型是否自己调用SOAP?视图模型应该通知模型自己保存吗?也许这是另一种方式,与MVVM完全分开?

我的想法是(至少在这个特定情况下)视图模型会处理它,因为它需要禁用视图中的保存按钮,直到当前保存请求完成。

+0

我开始写一个答案,然后说出自己,然后+1,而不是。我的直觉是模型应该处理它,因为大多数ViewModel使用模型的DataContext,但这并不是真的更新模型本身,而是模型之外的东西...... – 2010-08-30 19:40:47

回答

5

我通常在viewmodel和SOAP/WCF/Webservice层之间放置一个逻辑客户端应用程序/业务层。这一层是所有非视图业务逻辑和处理逻辑所在的地方。请记住,视图模型是视图的模型,而不是域的模型。因此,您希望尽快将控制权交给下一层。

在这种情况下,我会让视图在viewmodel上触发一个保存命令,该命令将依次调用到应用程序层中,从而调用远程服务。

4

ViewModel,不应该做这样的操作。它只应该触发它。因此模型必须这样做(或另一个负责加载和保存操作的中间层,而不是ViewModel本身)。

ViewModel可以观察保存操作并可以提供关于视图进度的状态信息。

0

我会创建一个可由ViewModel访问的服务处理程序。将它传递给viewmodel的构造函数,并调用服务处理程序公开的方法。