我正在使用類似於MVC的模式構建應用程序。下一個情況是:在模型的上下文中對相關存儲庫進行更改。如果更改拋出異常,向用戶提供有關錯誤信息的正確方法是什麼? 在我的程序以前的版本中,當我有spaguetti代碼組織(模型,視圖,控制器重疊)時,啓動一個告訴用戶有關錯誤的消息框並不奇怪,因爲我幾乎從視圖中做了所有事情。現在,在這個新版本中,我想正確地做這些事情,所以我認爲在模型層中做任何有視覺表示的東西都是不好的。 前段時間我問了什麼是捕捉異常的正確方法。我所指的特定點是將內部代碼中的異常擴展到上層,並將它們捕捉到最上層。幾乎所有的反應是,這不是一個很好的方法規模異常(捕獲和投擲再次被負責實體捕獲),並且最好在最上層捕獲。 所以我有這種衝突在我腦海中。我認爲這是不可避免的,以維持問題的分離擴大,但這與以前的建議相沖突。 我該怎麼辦?我如何在MVC/MVVM Windows窗體應用程序中執行錯誤處理
2
A
回答
2
一種常見模式是有一個通用的地方可以將錯誤放入現有模型中。
做到這一點的一個簡單方法是讓您的模型類都從具有IEnumerable<ErrorBase>
類型的屬性或您選擇的其他類型的基本模型類繼承。
然後,在您的演示者中,您可以檢查錯誤收集並根據需要進行顯示。只要有異常冒泡,我使用的方法(幾乎不管我正在構建什麼類型的應用程序)是隻處理較低級別的異常,如果你要做一些特殊的日誌記錄(比如記錄重要局部變量),或者如果你可以用這個異常做一些聰明的事情。否則,讓它泡。
在您的演示者(或Web服務類,或其他)之前的那一層,您可以捕獲您的異常,執行常規日誌記錄,並將它們包裝(或替換爲)「清理過的」異常。在用戶界面的情況下,您只需確保不會泄露敏感數據,並在可能的情況下顯示友好的信息。對於Web服務,您將這些問題轉化爲某種錯誤。等等
最上層對冒泡的異常沒有「責任」,他們只是負責確保那些不顯示給最終用戶(或web服務客戶端,或其他)你不希望他們......換句話說,你是在適當地「呈現」他們。
請記住,關注點分離是一種範例,您應該遵循作爲經驗法則,而不是一個擁有所有權的法令。就像抽象的抽象一樣,存在漏洞的範例。做一些有意義的事情,不要太擔心。 :)
相關問題
- 1. 從Windows執行批處理文件窗體應用程序
- 2. 我如何在Windows應用程序處理錯誤
- 3. Windows窗體應用程序錯誤
- 4. 如何在Windows窗體應用程序中創建全局錯誤處理程序?
- 5. Windows窗體應用程序中的.net遠程處理對象
- 6. 在Windows窗體應用程序中處理EF的驗證
- 7. 在Windows窗體應用程序中執行Word拼寫檢查
- 8. 何處放置Windows窗體項目的中央錯誤處理程序
- 9. WPF + Windows窗體錯誤處理
- 10. Windows窗體應用程序中未處理的異常
- 11. 我應該如何處理Codeigniter應用程序中的錯誤
- 12. 如何在C#應用程序中運行Windows窗體
- 13. 如何在Windows窗體應用程序中運行PowerShell命令?
- 14. Windows窗體應用程序C#安裝程序項目錯誤
- 15. RegistryKey在Windows窗體應用程序上執行的操作
- 16. Windows窗體應用程序
- 17. 我應該如何編寫我的C#Windows窗體應用程序的事件處理程序?
- 18. 如何在Windows .NET服務中執行錯誤處理
- 19. Windows窗體應用程序的C#圖像處理
- 20. 如何編寫AngularJS一般錯誤處理程序窗體
- 21. 如何在C sharp windows應用程序中處理交叉線程錯誤?
- 22. Windows窗體應用程序中的鏈接器錯誤
- 23. 如何在Windows Phone應用程序中實現通用錯誤處理異常?
- 24. 如何在Windows窗體應用程序上自動執行一些操作?
- 25. 用於關閉Windows窗體應用程序的事件處理程序
- 26. 客戶端的Windows窗體應用程序錯誤只能在我的機器上正確執行
- 27. Windows窗體線程錯誤
- 28. Windows窗體在程序執行過程中卡住
- 29. Windows窗體應用程序中的Windows.Web.Http?
- 30. 在linux中執行遠程命令時如何處理錯誤
謝謝,我現在適用你的建議。 – mjsr 2011-03-20 08:17:51