我有一些業務邏輯可以捕捉一些邏輯上無效的情況,例如試圖扭轉已經扭轉的交易。在這種情況下,正確的操作是通知用戶:如何區分我可以向用戶展示的例外,以及我無法展示的例外?
交易已經逆轉
或
不能扭轉倒車交易
或
您沒有權限扭轉交易
或
這項交易是對已經關閉
或
該交易是一個會話太舊,無法逆轉
問題是,我如何將這些特殊情況通知給調用代碼,以便他們可以顯示用戶?
做我創建的每個情況下,單獨的例外:
catch (ETransactionAlreadyReversedException)
MessageBox.Show('Transaction already reversed')
catch (EReversingAReversingTransactionException)
MessageBox.Show('Cannot reverse a reversing transaction')
catch (ENoPermissionToReverseTranasctionException)
MessageBox.Show('You do not have permission to reverse transactions')
catch (ECannotReverseTransactionOnAlredyClosedSessionException)
MessageBox.Show('This transaction is on a session that has already been closed')
catch (ECannotReverseTooOldTransactionException)
MessageBox.Show('This transaction is too old to be reversed')
下行的是,當有一個新的邏輯的情況下向用戶顯示:由NSL創建
Tranasctions不能顛倒
我不是簡單地向用戶顯示一條消息,而是將其作爲一個未處理的消息泄漏出去,當它真的應該被處理時另一個MessageBox
。
另一種方法是創建一個單一異常類:
`EReverseTransactionException`
隨着理解,這種類型的任何異常是一個邏輯檢查,應與一個消息框進行處理:
catch (EReverseTransactionException)
但是仍然認識到,任何其他例外,例如涉及內存ECC奇偶校驗錯誤的例外,都會繼續未處理。
換句話說,我不轉換所有的錯誤,可以通過ReverseTransaction()
方法被扔進EReverseTransactionException
,只有那些在邏輯上是用戶的無效的原因。
+1因爲我真的很喜歡你對每種情況的簡單描述,特別是*「系統生病了」* Aaronaught似乎同意你的看法,使用'ClientException'和'BusinessRuleException'。 **編輯:**在每種情況下,您的三個基本例外的名稱是什麼? – 2010-06-08 14:32:45