这几天我在琢磨异常的事情。
1、如何正确捕获异常?
2、如何使用异常?
缘由:
我有时看framework的源码,郁闷之极,几乎所有函数内都有异常。
而我之前开发项目时,异常是或者说黄页是高等级BUG。
后来在开发的时候经常写这种格式的函数 bool A (输入参数,out 输出参数,out String 错误信息)或者bool A (输入参数,out String 错误信息)
用了一段时间以后 极度郁闷,每个函数内都会有异常除了判断外你的还得告诉用户哪里错了。但是写这种格式函数既不美观(我通常形容写代码如果写作文)又不实用,每次还得对输出参数初始化,增加了代码量不说还烦。
所以我想到一个问题,凭啥微软能用异常,我不能用? 异常是最好的错误提示。
环境分析:
1、公共模块 环境
这种环境下我们不知道写出来的程序集哪个项目会用到,所以我觉得使用FCL内的异常类型比较好。
2、具体项目 环境
这种环境下,涉及到业务性的场合,你得告诉用户他的错误才行,比如用户名格式不对等等。(也许有人会说脚本验证就行了,何必后台验证和显示有好错误信息,我的回答是,作为服务端永远不要相信客户端(IE,C/S)传来的数据必须验证。)
我们可以先定义一个自定义异常,在异常内可以写错误日志。
1、在表现层中 截获自定义异常,不截获Exception(没有合理的理由绝不捕获该异常),
2、对于业务函数则统一抛出自定义函数如:new CustomException(“具体错误内容”); 或者new CustomException(Enum.Error);(枚举或者其他类型代替字符串有利于多语言支持)
这种方式下的代码就有点意思了
void A(String pMessage)
{
if(null==pMessage)
{
//throw new CustomException("error:pMessage is null");
throw new CustomException("您没有输入信息,请重新输入");
}
counsel.WriteLine(pMessage);
}