高效处理异常

Java开发人员做出的有关架构的最重要的决定之一便是如何使用Java异常模型。Java异常处理成为社区中讨论最多的话题之一。一些人认为Java语 言中的已检查异常(Checked Exceptions)是一次失败的尝试。本文认为错误并不在于Java模型本身,而在于Java库设计人员没有认识到方法失败的两个基本原因。本文提倡 思考异常情况的本质,并描述了有助于用户设计的设计模式。最后,本文讨论了异常处理在面向方面编程(Aspect Oriented Programming)模型中作为横切关注点(crosscutting concern)的情况。如果使用得当,Java异常将对程序开发人员大有裨益。本文将帮助读者正确使用Java异常。

为什么异常非常重要

  Java应用程序中的异常处理可以告诉用户构建应用程序的架构强度。架构是指在应用程序的各个层面上所做出的并始终遵守的决策。其中最重要的决 策之一便是应用程序中类、子系统或层之间进行互相通信的方式。方法通过Java异常可以为操作传递另一种结果,因此应用程序架构特别值得我们去关注。

  判断Java架构师技能的高低和开发团队是否训练有素,其中比较好的方法是查看应用程序中的异常处理代码。首先需要观察的是有多少代码专门用于 捕捉异常、记录异常、确定发生的事件和异常转化。简洁、紧凑和有条理的异常处理表明团队有使用Java异常的一致方法。当异常处理代码的数量将要超过其他 方面的代码时,可以断定团队成员之间的沟通已经打破(或者这种沟通从一开始就不存在),每个人都用自己的方法来处理异常。

  临时异常处理的结果非常具有预见性。如果问团队成员为什么在代码的某个特定点丢弃、捕捉、或忽略某个异常,回答通常是:“除此之外,我不知道怎 么做。”如果问他们在编写代码的异常实际发生时会产生什么情况,他们通常会皱眉,回答类似于:“我不知道。我们从来没有测试过。”

  要判断Java组件是否有效地利用了Java异常,可以查看其客户端的代码。如果客户端代码中包含大量计算操作失败时间、原因和处理方法的逻 辑,原因几乎都是由于组件的错误报告设计。有缺陷的报告会在客户端产生大量的“记录和遗留”(log and forget)代码,而没有任何用途。最糟糕的是扭曲的逻辑路径、互相嵌套的try/catch/finally程序块,以及其他导致脆弱和无法管理的应 用程序的混乱。

  事后处理异常(或者根本不处理)是造成软件项目混乱和延迟的主要原因。异常处理关系到软件设计的各个方面。为异常建立架构约定应该是项目中首先要做出的决定之一。合理使用Java异常模型将对保持应用程序的简洁性、可维护性和正确性大有帮助。

posted on 2013-02-15 11:30  蜜雪薇琪  阅读(156)  评论(0编辑  收藏  举报