分享
 
 
 

如何编写健壮的程序

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

以下紧为个人观点,希望大家讨论和完善,并设计较为好用的类库

编写健壮程序,首先正确的理解类库,

考虑异常处理和输入参数校验,其次是跟踪和改进。

概念

程序的执行就是系统状态的变化过程, 任何一个方法的执行,对象和系统会进入下一个状态。错误的发生可归结为:

 参数错误

 状态错误,方法执行的前提条件没有得到满足

这些处理,在公有的(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 当然跟踪和诊断也是不可少的

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有