Exception handling 处理异常的最佳位置

Exception handling 处理异常的最佳位置,exception-handling,software-design,Exception Handling,Software Design,哪里是处理较低层抛出的异常的合适位置。。在班里还是在可能的最高级别?还是取决于用例 您可以看看: 特别是,现在可以(并且被认为是良好的做法)设置顶级异常处理程序,以处理Windows应用程序中主线程上的任何意外异常。这意味着不再需要在每个例程中都使用异常处理程序。 你也可以看看 和一个用于Java中异常处理的链接 因此,作为对您问题的一般回答:我想说是的,这取决于用例(它只是您的简单短脚本还是一个成熟的应用程序),但是您应该尝试在尽可能高的级别上进行异常处理,在这样做的同时,请记住您向用户呈现的

哪里是处理较低层抛出的异常的合适位置。。在班里还是在可能的最高级别?还是取决于用例

您可以看看:

特别是,现在可以(并且被认为是良好的做法)设置顶级异常处理程序,以处理Windows应用程序中主线程上的任何意外异常。这意味着不再需要在每个例程中都使用异常处理程序。

你也可以看看

和一个用于Java中异常处理的链接

因此,作为对您问题的一般回答:我想说是的,这取决于用例(它只是您的简单短脚本还是一个成熟的应用程序),但是您应该尝试在尽可能高的级别上进行异常处理,在这样做的同时,请记住您向用户呈现的消息的“技术性”(相信我,“主线程中出现错误31231241”的消息并不能改善应用程序的用户友好关系)

编辑: 史蒂夫·麦康奈尔(Steve McConnell)在他的著名著作中也指出,应该
在正确的抽象级别抛出异常——例如,如果您有一个getUser()方法,然后返回IOException,这将是非常糟糕的。
但是,我认为这是常识。而且,他说,一个人应该以这样的方式编写函数,如果其他函数发送它“垃圾”,它不应该导致整个程序崩溃

此外,他还赞成使用,他说:
对预期发生的情况使用错误处理代码;对不应该发生的情况使用断言

最后指出,在解决错误的时候,你应该记住两种方法:<代码>健壮< <代码>和<代码>正确> <代码>。他在本书中所讲的这个例子非常生动,在我读了很久之后一直停留在我的脑海中。考虑到所呈现的数据的正确性。想象几个像素“疯狂”(你把它们错了,或类似的东西)-当然,如果这样的事情发生,你不会考虑强制关闭应用程序,这被称为<强>鲁棒性< /强>(继续操作)。但是,现在想象一下,你正在制作一个X射线操作应用程序——在这种情况下,任何“wierd数据”(正如McConnell所建议的)都应该引起严重的错误信息,据说你正在为应用程序的正确性而努力


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

感谢您的链接。我个人认为异常应该在应用层处理,因为用例是在应用层定义的,在类中处理异常也会严重降低类的可重用性。另一方面,正如OREILLY文章中提到的,如果抛出的异常在应用层中不能起到任何作用呃,那么它应该在相同的级别上处理。@bolbol:当然,np.Yes,这就引出了起始语句,它取决于用例。顺便说一句,请参阅我的更新。