处理异常的最佳位置

时间:2012-09-05 07:20:47

标签: exception-handling software-design

在低级层中处理抛出异常的适当位置在哪里..在类内或可能的最高级别?或者它取决于用例?

1 个答案:

答案 0 :(得分:2)

您可以查看this post

In particular it is now possible (and considered good practice) to set up a top-level exception handler that will handle any unexpected exception on the main thread in a Windows application. This means that it is no longer necessary to have exception handlers in every routine.

您还可以查看How to implement top level exception handling?

Java http://onjava.com/pub/a/onjava/2003/11/19/exceptions.html

中的一个异常处理链接

所以,作为对你的问题的一般答案:我会说是的,这取决于用例(它只是你的简单短脚本或完整的应用程序),但你应该尝试在以下处理异常处理尽可能最高级别,并且在执行此操作时请记住您向用户显示的消息的“技术性”(相信我,消息“主线程中的错误31231241”不会改善应用程序的用户友情)。 / p>

修改 正如史蒂夫麦康奈尔在其着名的Code Complete 2 book中所述,人们应该Throw exceptions on the right level of abstraction - for example if you have a getUser() method and you return IOException then that would be very bad.但是,我认为这是常识。另外,他说应该以这样的方式编写一个函数,如果某个其他函数发送它“垃圾”,它不应该导致整个程序崩溃。

此外,他赞成使用assertions,他说:Use error handling code for the conditions you expect to occur; use assertions for conditions that should never occur

最后,各州指出,在解决错误时,您应牢记两种方法:robustnesscorrectness。他在书中为这个例子讲述的故事非常生动,在我阅读之后很久就停留在我脑海中。考虑使用“文本编辑应用程序”并考虑所呈现数据的正确性。想象一下,几个像素“疯狂”(你错过计算它们,或者像那样) - 肯定你不会考虑强制关闭应用程序,如果发生这样的事情,这称为健壮性(继续运行)。但是,现在想象你正在制作一个X射线操纵应用程序 - 在这种情况下,任何“奇怪的数据”都应该(正如McConnell所建议的那样)导致严重的错误信息并且据说你正在努力正确性< / strong>在您的申请中。

P.S。请原谅CC2部分,但我只是喜欢这本书,并认为每个开发者都应该阅读它(至少一次)。