.net中对异常处理的一点简单体会~~~

    没有想到我所使用的异常处理方式,到现在才恍然大悟,既然那么的愚笨。从delphi到visual studio。没有想到是因为我的肤浅与无知......

    对于一个系统,当在运行的时候如果遇到异常,当然面对不同的人有不同的观点。如果是客户,他所关心的应该是该问题对于他所正在进行的业务的影响;如果是软件开发人员,他则需要了解更多的信息(比如异常的类型,触发异常的操作,异常产生的位置,异常的恢复等等);如果是类库编写人员,则可能相对开发人员所需要的信息较少,对于大部分的异常处理操作,都需要交由开发人员来进行。因此,不论怎样,对异常处理的最终目的,就是要能够准确的找到原因并及时的修复。

    在以前的异常处理方式中,我常常惯用int RunProcess()之类的函数形式,通过返回一个整型来表示程序的处理状态,如-1表示未知的错误,0表示成功,非零正値表示错误代码之类的,其后在对不同的返回代码进行定义,如0 用常数succeed表示 1用failed表示等等。随着应用的范围越来越广,显然难以维护,也不利于开发。

    后来发现如果直接返回异常的消息字符串,好像比以前又更加简单,于是就改为返回一个结构体的形式,如

     public structure Result
     {
          public boolean State;
          public string Msg;
     }

则int RunProcess()该为 Result RunProcess(),这样唯一减少的操作就是不需要在对返回的状态值进行定义,如

Result RunProcess()
{
    try
    {
         //具体的操作
        return new Result(true, "成功消息");
     }
    catch(Exception e)
    {
         //返回异常的消息
        return new Result(false, "异常消息");
    }
    finally
    {
       //资源清理等操作
    }
}

可是后来发现,这样的工作仍然过于繁琐,并且在性能上也有一定的影响,在看过《.net框架设计修订版之》后才感觉到异常处理的强大......

    对于异常的管理,如果是编写类库,则直接返回所需要的数据值就可以了,如返回一个boolean型来表示操作的是否成功,然后在该操作中捕获具体的异常,并对其处理,如清除当前占用资源等,之后,在继续抛出,传递给他的上层处理,最后交由开发人员来进行管理。

如: 在类库中编写一个返回文件大小的函数
    Int GetFileSize(String sFileName)
    {       
         try
         {
             System.IO.FileInfo fileInf = new System.IO.FileInfo(sFileName);
             return fileInf.Length;
         }
         catch(FileNotFoundException e) //这里也可以实现自定义的异常,并抛出
         {
             throw e;
         }
         finally
         {
             //如果有资源被打开,则在这里执行清理的操作...
         }
     }

之所以要继续抛出,是因为调用该类库的方法会在最外层进行捕获,如果只是简单的返回BOOLEAN 成功或则失败,即便是出了错,也不知道其具体发生的原因和产生的位置。

然而最终提示异常信息或则写入日志文件的地方应该是什么地方呢?

比如在界面中有一个按钮,点击该按钮后取得文件的大小,因此处理最终异常的地方就是在该按钮事件中进行。一般来说就是一个操作执行开始的地方才进行最终异常的处理,其他地方只负责资源清理或则异常的恢复等一些操作。

即便不是在编写类库,如果是作为其被调用的程序,都不应该将异常的消息屏蔽掉,如果这样做了,结果就会给系统带来许多不必要的麻烦,

最好的做法就是在某些地方假设程序不会出错(但这是不可能的),而有些地方需要假设程序总是出错...

对于性能的要求而言,肯定是有得必有失,我是喜欢图方便的人,除非你对性能要求非常非常的高,以至于走更多的弯路,换来差异不大的结果。

实际上对于异常的处理和他的处理机制,我也只是看完一些资料后的一些感悟,用简短的几句话是更本不能说明他的意义,同时因本人也比较懒所以只说出了自己的一点体会,一个大概~~~~

最后总结:

    1.对于函数方法,只需要返回需要的值;
    2.在操作的最外层进行最后的异常处理;
    3.在被调用的程序中不要将异常屏蔽掉(除非是产生异常后对系统没有任何影响,或则可以使用默认值继续处理,否则需要继续抛出到它的上层),需要注意的是如果创建了资源需要释放;
    4.不要在所有地方都使用Exception,而是使用具体的异常类;
    5.对于出现异常的地方,需要考虑异常的恢复和回滚;
    6.当出现异常后,客户和开发人员所关心的角度存在差异;
    7.不要指望自己的系统完全正确;

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值