2011-06-12 131 views
3

我有一個實體WPF應用程序設置如下: Views,ViewModels,Business Objects和Dals,與SQL Compact DB。 數據庫調用通過Linq2Sql進行。 應用程序是單用戶。 (每個用戶一個分貝)。WPF應用程序的異常處理

假設在CRUD操作期間發生了Dal內發生的異常,或者用戶已經刪除了數據庫,應該在哪裏進行異常處理。

此外,如果由於任何原因在View/ViewModel內引發異常,我不希望系統崩潰。我應該如何處理這個問題。我應該只通知用戶發生了錯誤,並重新創建View/ViewModel,以便用戶可以繼續。 ViewModels只通過Messenging與其他ViewModel通信(例如需要刷新的東西)。

+0

你的問題不清楚你能否解釋更多 – 2011-06-12 11:00:07

回答

2

最簡單的答案將取決於應用程序的要求究竟是什麼。

細節:首先,你應該做特殊的處理,凡有機會的例外情況。在執行CRUD操作的同時,在視圖模型中執行某些操作或者創建視圖時。用戶肯定不會喜歡應用程序崩潰。因此,最好的辦法是處理異常,自定義錯誤消息,以便它對用戶有意義並向用戶顯示,以便他/她知道發生了錯誤。另外問一下用戶現在做什麼(它實際上取決於應用需求再次),但例如,如果DATABSE文件已被刪除,詢問用戶是否希望創建這樣的

+0

+1 - 用戶不關心數據訪問問題的具體情況,他們只是希望它修復。抓住一切是可預見的或可預見的,一切應泡起來,在應用層進行處理 - 請確保您有它記錄在接近其原始狀態越好。 – slugster 2011-06-12 11:18:34

2

OnStartup()WPF應用程序的方法,你可以訂閱Application.Current.DispatcherUnhandledException異常事件,它允許您記錄異常,告知異常的用戶時,如果適當提出任何補救措施,並通過設置e.Handled = true來取消應用程序的終止。

如果可以修復異常的原因,則應該只取消應用程序的終止,否則可能會使應用程序處於未定義狀態。

2

DB問題一個新的或者事情應該在處理您的dal,dal應該通知某人有關消息/事件的問題。

視圖/視圖模型的異常應該被捕獲到這個類中,除非你有一些像caliburn這樣的mvvm框架,它可以獨立地處理這些東西。 捕獲異常之後,應將消息發送給將處理問題的shell/view manager。

相關問題