2

我正在使用類似於MVC的模式構建應用程序。下一個情況是:在模型的上下文中對相關存儲庫進行更改。如果更改拋出異常,向用戶提供有關錯誤信息的正確方法是什麼? 在我的程序以前的版本中,當我有spaguetti代碼組織(模型,視圖,控制器重疊)時,啓動一個告訴用戶有關錯誤的消息框並不奇怪,因爲我幾乎從視圖中做了所有事情。現在,在這個新版本中,我想正確地做這些事情,所以我認爲在模型層中做任何有視覺表示的東西都是不好的。 前段時間我問了什麼是捕捉異常的正確方法。我所指的特定點是將內部代碼中的異常擴展到上層,並將它們捕捉到最上層。幾乎所有的反應是,這不是一個很好的方法規模異常(捕獲和投擲再次被負責實體捕獲),並且最好在最上層捕獲。 所以我有這種衝突在我腦海中。我認爲這是不可避免的,以維持問題的分離擴大,但這與以前的建議相沖突。 我該怎麼辦?我如何在MVC/MVVM Windows窗體應用程序中執行錯誤處理

回答

2

一種常見模式是有一個通用的地方可以將錯誤放入現有模型中。

做到這一點的一個簡單方法是讓您的模型類都從具有IEnumerable<ErrorBase>類型的屬性或您選擇的其他類型的基本模型類繼承。

然後,在您的演示者中,您可以檢查錯誤收集並根據需要進行顯示。只要有異常冒泡,我使用的方法(幾乎不管我正在構建什麼類型的應用程序)是隻處理較低級別的異常,如果你要做一些特殊的日誌記錄(比如記錄重要局部變量),或者如果你可以用這個異常做一些聰明的事情。否則,讓它泡。

在您的演示者(或Web服務類,或其他)之前的那一層,您可以捕獲您的異常,執行常規日誌記錄,並將它們包裝(或替換爲)「清理過的」異常。在用戶界面的情況下,您只需確保不會泄露敏感數據,並在可能的情況下顯示友好的信息。對於Web服務,您將這些問題轉化爲某種錯誤。等等

最上層對冒泡的異常沒有「責任」,他們只是負責確保那些不顯示給最終用戶(或web服務客戶端,或其他)你不希望他們......換句話說,你是在適當地「呈現」他們。

請記住,關注點分離是一種範例,您應該遵循作爲經驗法則,而不是一個擁有所有權的法令。就像抽象的抽象一樣,存在漏洞的範例。做一些有意義的事情,不要太擔心。 :)

+0

謝謝,我現在適用你的建議。 – mjsr 2011-03-20 08:17:51

相關問題