WPF MVVM服务层

9
我计划第一次按照MVVM模式编写一个WPF应用程序,但有些东西还不太清楚。 假设视图有一个“保存”按钮,并且当用户点击该按钮时,需要保存数据的当前状态(即模型)。 这将通过向SOAP服务发送SOAP消息来完成。
在我的MVVM设置中,这些SOAP请求/响应处理程序应放在哪里? 当用户单击保存按钮时,视图模型自己进行SOAP调用吗? 还是视图模型应通知模型自行保存?也许它与MVVM完全无关?
我的想法是,在这种特定情况下,视图模型将处理它,因为它需要在当前保存请求完成之前禁用视图中的保存按钮。

我开始写答案,但又自己打消了念头,最终选择点赞。我的直觉是模型应该处理它,因为大多数ViewModel使用Model的DataContext,但这并不是真正更新Model本身,而是在Model之外的某些东西... - Wonko the Sane
3个回答

5
我通常在视图模型和SOAP/WCF/Webservice层之间放置一个逻辑客户端应用程序/业务层。这一层是所有非视图业务逻辑和处理逻辑的所在地。请记住,视图模型是视图的模型,而不是领域的模型。因此,您希望尽快将控制权移交给下一层。
在这种情况下,我会让视图触发视图模型上的保存命令,然后调用应用程序层,该层将进一步调用远程服务。

4

ViewModel 不应该执行这种操作,它只能触发操作,因此模型必须执行它(或者是另一个中间层负责加载和保存操作,但不是 ViewModel 自身)。

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接