我有一些业务逻辑可以捕捉一些逻辑上无效的情况,例如试图扭转已经扭转的交易。在这种情况下,正确的操作是通知用户:如何区分我可以向用户展示的例外,以及我无法展示的例外?
交易已经逆转
或
不能扭转倒车交易
或
您没有权限扭转交易
或
这项交易是对已经关闭
或
该交易是一个会话太旧,无法逆转
问题是,我如何将这些特殊情况通知给调用代码,以便他们可以显示用户?
做我创建的每个情况下,单独的例外:
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