2009-04-18 104 views
4

我有一個ASPX頁面調用來自業務邏輯類的CRUD操作的ObjectDataSource。當這些操作發生異常時,我想通知用戶這些錯誤以及記錄它們。但是我希望我的業務邏輯和表示層之間有明確的分離。我知道Selected,Inserted,Updated,Deleted事件提供了一個ObjectDataSourceStatusEventArgs類型的參數,其中包含一個屬性「Exception」,用於發生異常。處理ObjectDataSource異常的最佳方法是什麼?

這些事件的處理程序是處理ObjectDataSource異常的最佳位置,還是有更好的方法嗎?事件參數鏈的Exception屬性是否在操作過程中發生了所有異常?

有任何意見或建議,歡迎,

感謝,

卡倫

回答

0

如果在業務邏輯層的方法被自動調用,我會用這些事件。

我認爲這些事件的目的是:以某種自定義的方式顯示錯誤。

但我不會自動調用我的邏輯層中的方法。相反,我會通過代碼調用它們,並返回一個布爾值,指示操作是否成功。

像這樣,在插入時/更新Person:

if (Person.Save(data)) { 
    // show OK message 
} else { 
    // show error message 
} 

其中人是相對於人數據訪問層類BAL類。

希望得到這個幫助。

2

當您的Biz層對象執行CRUD操作期間發生異常時,應該由Biz對象處理,但部分處理。這是因爲你想要反饋到達表示層(並且你也想記錄錯誤)。因此,您可以:

a。重新拋出異常。這會將其展開到Presentation層。

b。將名稱 - 值數據對添加到異常的Data屬性,然後重新拋出它。

c。將引發的異常包裝成自定義異常類型並拋出異常。

這個異常然後會冒泡到您的ObjectDataSource中,並且可以通過您選擇/插入/刪除/更新事件處理程序中的ObjectDataSourceStatusEventArgs.Exception屬性進行使用。然後你應該檢查這個屬性是否爲空。如果不是,則ObjectDataSource在TargetInvocationException包裝器中包裝任何異常(是,複數!),因此您可能需要獲取InnerException。

然後,您可以修改UI元素以向用戶提供操作未成功完成的必要反饋。此外,您需要將ExceptionHandled屬性設置爲True以防止異常冒泡到頁面級別。

至於記錄異常,我個人會在兩層 - 商業邏輯層和表示層記錄錯誤。

+0

@Cerebrus:謝謝。 – 2009-04-18 13:51:45

相關問題