转载地址: http://www.diybl.com/course/4_webprogram/asp.net/netjs/2007101/75794.html
异常与返回值在报告错误上的优势
与返回值来报告错误相比,异常处理有许多优势,好的框架设计能帮助应用程序开发人员认识到异常所具有的优势。
l 异常增强了API的一致性,这是因为设计异常的唯一目的就是为了报告错误。相比之下,返回值就有多种用途。
l 异常已经很好的与面向对象结合在一起了,在构造函数,操作符重载以及属性为例,程序员不可能使用返回值来报告错误是不可能的。只能通过异常来处理。
l 在用返回值来报告错误时候,错误处理的代码与可能会发生错误的代码距离总是很近。但是,在使用异常处理的时候,开发人员就能有更多的选择。既可以在错误发生附近捕获异常,也可以在调用栈上层对错误进行集中处理
l 更容易使错误处理的代码局部化。如果使用返回值来报告错误,那么对于那些极其稳固的代码来说,几乎是每个可能出错的地方都有一个IF语句,这些IF语句的目的就是对错误进行处理。如果使用异常来报告错误,那么编写稳固的代码就要容易很多。可以把错误处理代码集中在try代码后面的模块,甚至是栈的更高处。
(虽然不应该用返回值来表示错误,但是可以考虑在操作成功情况下用它来返回一些状态信息,比如插入了多少行数据。)
l 错误代码很容易被忽略。另一方面,异常在代码的控制流中扮演了一个积极的角色,它使得开发人员无法忽略通过异常来报告错误,从而使得代码变得更加稳固。
(应该指出的是,这意味着在测试时会发现更多的BUG,而最终发行版本将更加稳固,另外,由于发行代码更加稳固,当真正投入使用的时候,抛出异常的数量可能会非常少)
l 使用基于返回值的错误处理模型时,如果调用API失败,那么程序很有可能会在结果不正确的情况下继续运行,并在后来导致程序崩溃或者数据损坏。在使用基于异常的处理模型时候,一旦发生错误,线程就被停止。调用代码会有机会对异常进行处理。如果调用栈上方没有任何方法对异常进行处理,那么应用程序即被终止。终止应用程序逼让它继续不正常运行要好得多。
l 异常可以包含丰富的信息来对错误的原因进行描述
l 异常允许用户定义未处理的异常的处理程序(就是普通的Catch块)理想情况下,应用程序应高足够智能,可以处理所有异常,但是这不现实,因为开发人员不可能预料到所有的异常。在使用错误码时候,意外的错误通常会被忽略,程序会继续不稳定的运行。如果代码正确使用了异常,那么处理程序可以把失败记录下来,并且可以关闭程序。与其继续让应用程序运行并产生不确定的结果相比,这座做法要可取的多。
l 异常有助于监控,异常是经过精心定义的方法失败模型。正因为如此,各种工具(比如调试器,性能分析器,性能计数器等)可能会时刻注意异常的发生。
浙公网安备 33010602011771号