【发布时间】:2014-04-08 08:54:38
【问题描述】:
在 MVVM 模式、视图模型或模型中哪个是调用服务的正确位置?我打算从 ViewModel 调用服务,获取 JSON 并将其转换为相应的模型。 我不从模型调用服务以保持模型与服务分离的原因。
这种方法是否正确,或者我应该从模型中调用服务?
【问题讨论】:
标签: wpf silverlight windows-phone-7 windows-phone-8 mvvm
在 MVVM 模式、视图模型或模型中哪个是调用服务的正确位置?我打算从 ViewModel 调用服务,获取 JSON 并将其转换为相应的模型。 我不从模型调用服务以保持模型与服务分离的原因。
这种方法是否正确,或者我应该从模型中调用服务?
【问题讨论】:
标签: wpf silverlight windows-phone-7 windows-phone-8 mvvm
通常,VM 负责进行服务调用。示例调用堆栈可以是:
UI 事件(视图)=> ICommand 执行(VM)=> 服务调用(VM)。
建议使用与您的应用程序相同的域对象的可重用服务层 - 因为它允许多个 VM 共享服务调用逻辑(从 cmets 添加)。
【讨论】:
It's advisable to have a re-usable Service Tier which leverages the same domain objects as your app. +1,因为它允许多个虚拟机共享服务调用逻辑
我认为调用服务的正确位置是在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)。
如果您想重用服务访问代码,您可以创建某种可以从各种模型中调用的服务助手。
【讨论】: