技术开发 频道

ASP.NET2.0:AdventureWorks贸易系统


ExceptionPolicy对象

    只要使用异常处理块,就必须处理ExceptionPolicy类。ExceptionPolicy类公开了静态方法HandleException(),利用该方法可使客户端应用程序与异常处理块交互,此时将策略作为参数提供。HandleException()方法使用类工厂来为相应的策略创建ExceptionPolicyImpl类型的对象。ExceptionPolicyImpl对象具有一个ExceptionPolicyEntry对象集合。在名为策略的配置文件中,每种异常类型都对应一个对象。对每一种异常类型,ExceptionPolicyEntry对象都包含一个实现IExceptionHandler接口的对象集合。当执行策略时,对象集合能够提供异常处理块使用的序列。每个实现IExceptionHandler接口的对象都与对应处理方法的类型相关联。

    异常处理方法是 .NET类,其封装了异常处理逻辑,并实现了定义在异常处理块中的IExceptionHandler接口。默认情况下,异常处理块包含以下三种异常处理程序:

    封装处理程序:此异常处理程序使用一个异常封装另一个异常
    取代处理程序:此异常处理程序用一个异常取代另一个异常
    日志记录处理程序:此异常处理程序对异常信息进行格式化处理,例如,消息和堆栈跟踪。然后日志记录处理方法将这些信息记录到日志块,以作日后查证。

    既然已经了解了异常处理块的基础知识,下面将重新讲解业务逻辑层类的代码,以便理解异常处理块的集成:
public IList<ProductCategory> GetProductCategories()
{
try
{
ProductCategoryDB category = new ProductCategoryDB();
return category.GetProductCategories();
}
catch (Exception ex)
{
bool rethrow = ExceptionPolicy.HandleException(ex, "Log Only Policy");
if (rethrow)
{
throw;
}
return null;
}
}
    在try块中无论何时发生异常,都将在catch块中捕获异常,并在其中调用ExceptionPolicy对象的HandleException()方法,以便记录异常。在记录异常之后,可查看HandleException()方法的返回值(根据配置文件中的postHandlingAction属性),以便确定是否需要向调用者抛出异常。

9. 小结

   本文介绍的数据访问层实现中涉及集成重用块,开发人员使用这些块能够快速方便的实现数据访问、异常处理等很多重复性高的任务。建议读者在学习这些重用块之后,将其应用到自身的项目开发过程中,从而提高开发效率。
下一篇文章讲解Web站点部分的实现方法。
0
相关文章