防御式编程
2010-11-29 16:06
190 查看
错误处理技术
返回中立值:
处理错误的最佳做法就是继续执行操作并简单的返回一个没有危害的数值。
换用下一个正确的数据:
在处理数据流的时候,有时只需返回一个正确的数据即可。
返回与前次相同的数据:
数据改变较小的数据。
使用最接近的合法值:
比如倒车时,速度不会显示为负,而是显示为0。
把警告信息保存到日志文件中
返回一个错误码:
重点是决定哪些地方应该直接处理,哪些地方返回错误码,给出报告。如果安全性很重要,要确认调用方的子程序总会检查返回的错误码。
1:设置状态变量的值
2:返回状态变量的值
3:抛出一个异常
调用用来处理错误的子程序或对象:
把错误处理都集中到一段子程序或者对象中,代价是需要让所有开发者均需要采用这一子程序,并且发生了耦合。
用最恰当的方式在局部处理错误:
关闭程序:
适用于与人身安全攸关的程序。
异常
在恰当的抽象层次抛出异常
当决定把一个异常传给调用方时,请确保子程序的抽象层次与异常的抽象层次相同。避免代码耦合,破坏封装性。
把项目中对异常的使用标准化
可以建立项目的特定异常类,它可用作所有可能抛出的异常的基类,这样就可以把日志记录报告出来,并标准化。
考虑异常的替换方案
仅仅因为编程语言提供了异常处理机制而使用异常,是典型的“为用而用”,这也是典型的“在一种语言上去编程”,而不是“深入一种语言去编程”。
在异常信息中加入有关异常的全部信息,避免使用空的catch语句。
了解使用的函数库所抛出的异常。
返回中立值:
处理错误的最佳做法就是继续执行操作并简单的返回一个没有危害的数值。
换用下一个正确的数据:
在处理数据流的时候,有时只需返回一个正确的数据即可。
返回与前次相同的数据:
数据改变较小的数据。
使用最接近的合法值:
比如倒车时,速度不会显示为负,而是显示为0。
把警告信息保存到日志文件中
返回一个错误码:
重点是决定哪些地方应该直接处理,哪些地方返回错误码,给出报告。如果安全性很重要,要确认调用方的子程序总会检查返回的错误码。
1:设置状态变量的值
2:返回状态变量的值
3:抛出一个异常
调用用来处理错误的子程序或对象:
把错误处理都集中到一段子程序或者对象中,代价是需要让所有开发者均需要采用这一子程序,并且发生了耦合。
用最恰当的方式在局部处理错误:
关闭程序:
适用于与人身安全攸关的程序。
异常
在恰当的抽象层次抛出异常
当决定把一个异常传给调用方时,请确保子程序的抽象层次与异常的抽象层次相同。避免代码耦合,破坏封装性。
把项目中对异常的使用标准化
可以建立项目的特定异常类,它可用作所有可能抛出的异常的基类,这样就可以把日志记录报告出来,并标准化。
考虑异常的替换方案
仅仅因为编程语言提供了异常处理机制而使用异常,是典型的“为用而用”,这也是典型的“在一种语言上去编程”,而不是“深入一种语言去编程”。
在异常信息中加入有关异常的全部信息,避免使用空的catch语句。
了解使用的函数库所抛出的异常。