exception-handling - 处理异常的最佳位置

标签 exception-handling software-design

处理从较低层抛出的异常的正确位置在哪里......在类内部或可能的最高级别?或者这取决于用例?

最佳答案

你可以看看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”不会改善您的应用程序的用户友好性)。

编辑:
正如史蒂夫·麦康奈尔 (Steve McConnell) 在他著名的 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 所建议的)导致严重错误消息,据说您正在为 而努力。正确性在您的申请中。

附注原谅 CC2 部分,但我只是喜欢那本书,并认为每个开发人员都应该阅读它(至少一次)。

关于exception-handling - 处理异常的最佳位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12276409/

相关文章:

c++ - 从 dll 中的函数返回时堆损坏

java - 嵌套的 try 异常是否会被外部 catch block 捕获

c++ - 如何限制对 A 类的非常量公共(public)成员 m 的访问为 const 到另一个类 B,包含 A 作为非常量成员?

design-patterns - 洋葱架构的 DDD 端口和适配器,哪里去了?

delphi - SW-设计 : Adapters for Class Hierarchy in Delphi (Generics vs. 沮丧)

uml - 图表程序有助于设计软件?

julia - 保持/循环具有相同抽象父类型的对象集合的最佳实践 (Julia)

java - 在 Java 中处理异常或抛出异常

c# - 在 c# om nom nom 中吃异常

java - 捕获所有类型的异常编程 Android