以下仅为个人观点,希望大家讨论和完善,并设计较为好用的类库
编写健壮程序,首先正确的理解类库,
考虑异常处理和输入参数校验,其次是跟踪和改进。
概念
程序的执行就是系统状态的变化过程, 任何一个方法的执行,对象和系统会进入下一个状态。错误的发生可归结为:
? 参数错误
? 状态错误,方法执行的前提条件没有得到满足
这些处理,在公有的(public)方法或类和非公有的方法或类处理中是不一样的,比如在私有的方法中,一般不用有用参数校验,因为它的调用者通常是程序的编写者自己。但输入参数是否为空对象,可以在调用之前进行诊断,然后进行相应的处理 (或者不判断但系统会引发运行时错误)。
参数校验一般是指用户输入和应用程序的调用时的参数输入校验,前者应该为程序必须处理的可恢复的异常,后者通常导致程序的执行逻辑产生的运行时异常,如典型的数组越界和空指针, 一般在程序的设计中有一般的处理方式,在java中抛出IllegalArgumentException或进行错误翻译到适当的抽象层次进行抛出。
异常一般有三种级别:
? 可恢复,被检查的异常,这类是调用应用程序必须处理的,我们写程序处理的多半为这种异常。
? 运行时错误,绝大部分为不可恢复的异常。此种异常的抛出时,通常调用的功能不能成功的执行,但不是严重的,应用程序不会崩溃。这类异常的处理就非常重要,它会影响你程序的失败范围。
? 非常严重的错误,它可能会导致整个应用程序崩溃,在JAVA中通常抛出为ERROR类型错误,通常的起因为资源枯竭,环境严重错误。
对于在应用程序的体系结构设计中,其传播途径和处理方式,大家要达成共识,
首先为要把异常和正常区分开来,一个抛出太多异常的接口,只会使程序过度复杂,一些需要处理的异常也不能加重别人的负担。其次对用户的输入校验应该作为被检查的异常来处理,它是用户可能出现的一种情况,也是用户输入和输出接口的一部分,这类处理抛出的错误信息集中保存便于修改,并使用统一的接口进行读取,并放在公共的包类大家一起使用。
比如在apache的java项目axis开发中Developer's Guide 建议大家如此使用
Handle Specific Exceptions in Inner Code
Catch All Exceptions in Outermost Flow of Control
Catching and Logging Exceptions
下表为JAVA中最常用的异常类:
Table 1。 Commonly Used Exceptions
Exception Occasion for Use
IllegalArgumentException 非法参数
IllegalStateException 对象非法状态
NullPointerException 空值参数
IndexOutOfBoundsException 下标越界
UnsupportedOperationException 没有实现的方法。
原则
以下为异常处理的基本原则:
1. Use exceptions only for exceptional conditions
只对异常情况使用异常处理,不要使用异常实现控制结构,对于经常发生的可预计事件不要采用异常
2. Use checked exceptions for recoverable conditions and run-time exceptions for programming errors
在可恢复的情况下抛出异常,程序错误使用运行时异常
3. Avoid unnecessary use of checked exceptions
避免过多的不必要的被检查的异常
4. Favor the use of standard exceptions
尽量使用标准异常
5. Throw exceptions appropriate to the abstraction
异常的抛出有正常的抽象级别
6. Document all exceptions thrown by each method
使用文档记录抛出的异常,例如JAVA DOC @exception name des cription
7. Include failure-capture information in detail messages
包括错误的详细信息
8. Strive for vetbfailure atomicity
使失败原子性,不要让程序在不正确的状态,比如出错事务回滚
9. Don't ignore exceptions
不要忽视(不处理)异常
设计
设计的目标为统一和规范化错误处理的流程,设计统一的共用类,大家进行统一调度。为了达到以上目标使用如下的原则:
1 错误的详细信息统一保存
2 用户的输入校验,网页只处理是否为空和去掉头尾空格,客户断逻辑进行类型转换,业务逻辑层进行校验,然后查询错误信息,使它成为最终的详细的错误信息返回给用户。
3异常的产生,调用者对非用户输入参数校验和状态错误产生的异常,使用第5和第7条规则
错误信息表
4 当然跟踪和诊断也是不可少的