交互服务与交互请求对象

and*_*rew 8 .net c# silverlight prism

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

jsp*_*aey 1

我同意你的观点,交互服务可以适用于常见的交互行为,例如消息框等。

在我看来,这可以归结为阶级责任。换句话说,您是否希望 ViewModel 或 View 负责指定应发生哪种类型的交互?

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

public interface IInteractionService{
    MessageBoxResult ShowMessageBox(string messageBoxText, string caption, MessageBoxButton button);
}
Run Code Online (Sandbox Code Playgroud)

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

使用交互对象,您可以将更多交互行为的责任放在视图上。换句话说,您可以更改交互的行为和外观,而不会直接影响 ViewModel。例如,交互请求的 V1 可以显示一个简单的 MessageBox。交互请求的 V2 可能是一个更复杂的对话框,需要比简单按钮单击更多的用户交互。无需修改 ViewModel 即可管理这种交互行为更改。如果您的 UI 设计人员正在处理项目,并且希望可以选择交换或更改与交互请求相关的视图的行为或外观,那么这可能会很有用。

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

总而言之,在我看来,交互服务可以更容易使用,但交互对象可以使您的视图模型更加可重用。