我应该将此功能放在View(代码隐藏)或ViewModel中吗?

Sor*_*mar 6 c# wpf mvvm

我正在创建一个简单的WPF应用程序.我有一个函数OpenFile:

private void OpenFile(string fileName)
{
   if(!File.Exists(Helper.GetPath(fileName)))
   {
      MessageBox.Show("Error opening file");
   }
   else
   {
      //Code to handle file opening
   }
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,此功能应存在于何处?我觉得应该是.xaml.cs因为它访问了部件中的MessageBox View.但它也称我的助手为模型中的助手.所以我也认为它可以在ViewModel.在这个View或那个中有这个有什么好处ViewModel?有人可以帮我提一些指示吗?

谢谢.

dev*_*tal 7

将其置于视图模型中的一个优点是可测试性.您可以编写单元测试,检查是否仅在文件存在时才显示消息框(如果您正在访问文件系统,则更准确地说,它将是集成测试).

但是,由于您直接使用消息框,因此在构建服务器上永远不会完成测试,因为在显示消息框时,计算机将等待用户的输入.

因此,我会在视图模型中反对抽象,以便您可以在测试期间模拟消息框.


ros*_*euz 7

此函数必须位于ViewModel中.您需要在视图中创建一个操作以显示错误消息并调用此方法而不是MessageBox.Show.显示消息框需要在View.

通常,您应该避免在View验证或处理文件中实现任何业务逻辑.