【问题标题】:Service call from MVVM来自 MVVM 的服务调用
【发布时间】:2014-04-08 08:54:38
【问题描述】:

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

这种方法是否正确,或者我应该从模型中调用服务?

【问题讨论】:

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


    【解决方案1】:

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

    UI 事件(视图)=> ICommand 执行(VM)=> 服务调用(VM)。

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

    【讨论】:

    • MV的确切含义是什么?
    • 你的意思是VM而不是MV?
    • 至少我是一致的:)
    • It's advisable to have a re-usable Service Tier which leverages the same domain objects as your app. +1,因为它允许多个虚拟机共享服务调用逻辑
    【解决方案2】:

    我认为调用服务的正确位置是在Model中。

    我不从模型调用服务以保持模型与服务分离的原因

    因此,在这种情况下,您的 ViewModel 应该处理表示逻辑以及可能涉及数据验证或操作的服务调用。 根据

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

    视图模型类:

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

    模型类

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

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

    UI 事件(视图)=> ICommand 执行(VM)=> 服务调用(VM)。

    我觉得应该更像这样

    UI Event (View) => ICommand Execute (VM) => Handle Command/Action (VM) => 执行 VM Command 应该触发的业务/数据逻辑 (M) => Service Call (M)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-06
      • 2015-09-04
      • 2014-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      相关资源
      最近更新 更多