首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交互服务与交互请求对象

交互服务与交互请求对象
EN

Stack Overflow用户
提问于 2011-10-20 15:42:38
回答 2查看 2.4K关注 0票数 8

我想知道当使用Prism时,交互请求对象比使用交互服务模式更可取。对于我来说,交互服务应该在简单的情况下使用,即当你有一个标准的消息弹出窗口,并且只有文本内容要改变的时候。另一方面,当UI更复杂时,交互请求对象更适合。但是交互服务更容易实现,并且需要的代码更少。你认为如何?

EN

回答 2

Stack Overflow用户

发布于 2012-03-10 05:00:17

使用交互服务显示消息框的巨大缺点是父窗口-或者更确切地说,缺少父窗口。

从视图模型或服务实现中,您应该提供哪个窗口作为消息框的父窗口?如果您选择Application.Mainwindow,您将对整个应用程序布局做出一个巨大的假设。

流程中知道如何显示交互的唯一实体是视图。无论是使用消息框,还是页面内覆盖。

如果使用交互服务,几乎没有有效的论据支持。通常使用的一种方法是它更容易。这可能是真的,但对许多其他不应该做的事情也是如此,例如代码隐藏等。

票数 2
EN

Stack Overflow用户

发布于 2012-03-10 04:52:39

我同意您的观点,即交互服务可以适用于常见的交互行为,如MessageBoxes等。

在我看来,归根结底是阶级责任。换句话说,您是否希望ViewModel或视图负责指定应该发生的交互类型?

考虑一个基本的交互服务接口:

代码语言:javascript
复制
public interface IInteractionService{
    MessageBoxResult ShowMessageBox(string messageBoxText, string caption, MessageBoxButton button);
}

通过观察界面,很明显ShowMessageBox将产生什么样的行为。这使ViewModel在指定它期望发生的交互行为类型方面具有一定程度的控制权。这种方法的问题是,您的ViewModel现在依赖于IInteractionService,并且它的交互行为预期也是明确的。这可能会降低ViewModel的可重用性。

使用Interaction对象,您可以将更多的交互行为的责任放在视图上。换句话说,您可以更改交互的行为和外观,而不会直接影响ViewModel。例如,交互请求的V1可以显示一个简单的MessageBox。交互请求的V2可以是比简单的按钮点击需要更多用户交互的更复杂的对话框。可以在不需要修改ViewModel的情况下管理这种交互行为改变。如果您有一个UI设计人员在项目中工作,他想要交换或更改绑定到交互请求的视图的行为或外观,那么这将非常有用。

如果你愿意,你可以使用这两种策略。换句话说,交互服务用于常见的交互行为,而交互对象用于更复杂的行为。

总之,交互服务更容易使用,但在我看来,交互对象可以使您的ViewModels更具可重用性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7832615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档