2011-10-20 31 views
8

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

+0

我有同样的问题。任何人... – dFlat

回答

1

我同意你说的交互服务可以适用于普通的交互行为,如消息框等

在我看来,把它归结为阶级的责任。换句话说,你是希望ViewModel还是View负责指定应该发生什么类型的交互?

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

public interface IInteractionService{ 
    MessageBoxResult ShowMessageBox(string messageBoxText, string caption, MessageBoxButton button); 
} 

这是一个从观察什么样的行为ShowMessageBox的类型会产生界面相当明显。这就给ViewModel一定程度的控制,以指定它期望发生什么类型的交互行为。这种方法的问题是你的ViewModel现在依赖于IInteractionService,并且明确了它的交互行为期望。这可能会让ViewModel的可重用性降低。

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

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

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

2

使用交互服务显示消息框的巨大缺陷是父窗口 - 或者说缺少一个窗口。

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

知道过程中唯一的实体如何来显示交互是视图。无论是使用消息框还是使用页内叠加层。

如果使用交互服务,有几个有效参数可以支持。常用的是它更容易。这可能是事实,但对于许多其他不应该完成的事情也是如此,例如后面的代码等。