来自MVVM的服务调用

时间:2014-04-08 08:54:38

标签: wpf silverlight windows-phone-7 windows-phone-8 mvvm

在MVVM模式,视图模型或模型中调用服务的正确位置是什么?我打算从ViewModel调用服务,获取JSON并将其转换为相应的模型。 我没有从Model调用服务来保持模型与服务分离的原因。

这种方法是正确的还是我应该从模型中调用服务?

2 个答案:

答案 0 :(得分:3)

通常,VM负责进行服务呼叫。示例调用堆栈可以是:

UI事件(查看)=> ICommand Execute(VM)=>服务呼叫(VM)。

建议使用与您的应用程序相同的域对象的可重用服务层 - 因为它允许服务调用逻辑由多个VM共享(从注释中添加)。

答案 1 :(得分:1)

我认为调用服务的正确位置是模型

  

我之所以没有从Model调用服务来保持Model脱离服务

因此,在这种情况下,您拥有ViewModel,它应该处理与可能涉及数据验证或操作的Service调用相结合的表示逻辑。 根据

5: Implementing the MVVM Pattern Using the Prism Library 5.0 for WPF

  

视图模型类:

     

它封装了支持应用程序中的用例或用户任务所需的表示逻辑。视图模型可以独立于视图和模型进行测试。   视图模型通常不直接引用视图。它实现了视图可以绑定数据的属性和命令。   视图模型协调视图与模型的交互。它可以转换或操作数据,以便视图可以轻松使用它,并可以实现模型中可能不存在的其他属性。

     

模型类

     

模型类是封装应用程序数据和业务逻辑的非可视类。他们负责管理应用程序的数据,并通过封装所需的业务规则和数据验证逻辑来​​确保其一致性和有效性。   模型类通常与封装数据访问和缓存的服务或存储库结合使用。

正如前面的答案显示的那样:

  

UI事件(查看)=> ICommand Execute(VM)=>服务呼叫(VM)。

我认为应该更像这样

  

UI事件(查看)=> ICommand Execute(VM)=>处理命令/动作(VM)=>执行VM命令应该触发的业务/数据逻辑(M)=>服务电话(M)。

如果要重用服务访问代码,可以创建某种服务助手,可以从各种模型调用。