快速业务通道

在ASP.NET 2.0中实现异常管理

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21

介绍

在任何应用系统开发中,异常管理对开发人员来说都是一个关键领域。作为 一个开发人员,你应该采用一种合适的、能让你编写健壮且高质量代码的异常管 理策略。如果使用得当,异常管理将是一个很强大的概念而且使你的开发工作变 的很容易。然而,一个不合适的异常处理将会使你的应用系统性能降低。

在你钻研这些之前,要先搞清楚异常管理是什么,这点很重要。一般来说异 常就表示“打破系统预定的假设”。“异常”和“错误”是不一样的,为了解释 清楚,我们来看两个例子:

示例一

我们假设你试图向一个文件写入数据,而你的应用程序也认为这个文件在正 确的路径上。如果不在,就会抛出一个异常。而话说回来,如果你的职责是跟踪 此文件,那么代码里还有(找不到文件的)异常那将是一个不好的编码习惯,这 种情况应该被校验代码处理(而不是异常)。

示例二

再让我们假设一个一般的ASP.NET程序中,你正试图更新数据库中所有必需的 字段。你的应用程序认为此数据库连接可用,假设实际上这个连接是不可用的… …抛出异常是一个解决方案。而我们又把话说回来,如果更新数据库的必填字段 时出现有几个值为空的字段,那抛出异常就没有必要了,这些处理应该由校验代 码完成。

如何处理异常

作为一个开发人员,你应该感受到通过try, catch, finally块来构建一个结 构化异常处理机制的优点。.NET框架提供了一大堆异常处理层次来处理不同种类 的异常。所有的异常都继承自Exception(基类)。你可以通过继承来实现自定 义错误处理以扩展异常处理机制。不幸的是,很多开发人员都误用了这种架构能 力。一个随时要记着的事是当一个异常发生在运行时时(这个架构)应该如何运 作?一般有以下三种情况:

忽略异常,让它在调用栈里上升而被其它的catch块捕获。

捕获异常,同时为你的应用程序执行必要的动作,如果你不想再次在异常中 抛出异常的话。

捕获异常,并用其它异常覆盖它。这样和你的应用程序有更密切的关系。异 常覆盖是为了避免打破(架构中的)抽象层次。你可以通过你抛出的异常的 InnerException属性指定原异常是什么,这样就可以把你现有的异常用一个新的 异常来覆盖了(更与你系统有关的)。为了了解异常覆盖,让我们来看一个能引 起IOException异常的方法,你可以在应用级别使用LoadingException 或 FailtoLoadInfoException来覆盖原有的IOException异常,这样比把底层的 IOException给用户看到要来的好些。

一个应用程序的异常处理框架应该有以下几种(要求):

探测异常;

执行代码清除;

内部异常覆盖;

内部异常替换;

记录并报告错误信息;

建立能被外部监视的事件以帮助系统操作;

在开始你应该建立一个一致的,健壮的异常管理架构,在你所有的系统中应 该很好的封装并抽象其记录和报告等的细节。

好的习惯

以下列出一些不错的提示/建议供你在(设计)异常处理(时)参考:

抛出异常要不小的代价。所以,你应该尽可能地在“异常情况”下进行异常 处理,不要去控制正规逻辑流程。比如,以下代码:

void EmpExits(string EmpId)
{
  // search for employee
  if(dr.Read(EmpId) == 0) // no record found
  {
throw(new Exception("Emp Not found"));
  }
}

应该用以下代码:

bool EmpExits(string EmpId)
{
// search for employee
if(dr.Read(EmpId) == 0) // no record found
{
return false;
}
}

避免在循环中捕获异常,如果实在是要捕获,那把整个循环都放在try/catch 块里。

采用标准try/catch/finally异常处理方式进行处理,这在托管代码里是被推 荐的。最后的Finally块确保异常事件中的资源都被释放掉了。

比如:

SqlConnection conn = new

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号