[英]Should I put this function in View (code-behind) or in ViewModel?
我正在創建一個簡單的WPF應用程序。 我有一個函數OpenFile:
private void OpenFile(string fileName)
{
if(!File.Exists(Helper.GetPath(fileName)))
{
MessageBox.Show("Error opening file");
}
else
{
//Code to handle file opening
}
}
理想情況下,此功能應存在於何處? 我覺得它應該在.xaml.cs
因為它訪問View
部分中的MessageBox。 但它也稱我的助手為模型中的助手。 所以我也認為它可以在ViewModel
。 在View
或ViewModel
中使用它有什么好處? 有人可以幫我提一些指示嗎?
謝謝。
將其置於視圖模型中的一個優點是可測試性。 您可以編寫單元測試,檢查是否僅在文件存在時才顯示消息框(如果您正在訪問文件系統,則更准確地說,它將是集成測試)。
但是,由於您直接使用消息框,因此在構建服務器上永遠不會完成測試,因為在顯示消息框時,計算機將等待用戶的輸入。
因此,我會在視圖模型中反對抽象,以便您可以在測試期間模擬消息框 。
此函數必須位於ViewModel中。 您需要在視圖中創建一個操作來顯示錯誤消息並調用此方法而不是MessageBox.Show
。 顯示消息框需要在View
完成。
通常,您應該避免在View
實現任何業務邏輯,例如驗證或處理文件。
如果您使用的是Microsoft Prism,則可以使用IInteractionRequest
接口讓視圖創建MessageBox
,但實際上會將必要的響應傳遞給視圖模型。
如果您不使用Microsoft Prism,那么請查看此部分的工作原理,並模擬它或使用類似的框架。
基本上,該代碼應該在您的視圖模型上進行測試,但是替換顯式調用MessageBox的行並使用提到的IInteractionRequest
。
以下是與您要實現的方案相關的文檔: 第6章:高級MVVM方案 。 . 請查看 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.