NFramework开源AOP框架升级进展
1 版本更新说明
1.1 增加AOP功能(2006-05-17)
实现了AOP框架,并提供了基于AOP的自动事务管理、性能监控、日志管理、权限控制等常用功能。
1.2 SQL语句自动缓存(2006-05-17)
实现了所有自动生成的动态SQL语句缓存功能,使框架性能得到非常大的提高。
1.3 AppUtil类的扩展(2006-05-17)
增加了常用的处理下拉框等绑定控件的功能。
2 介绍使用AOP的事务处理方式
AOP为我们的代码提供了非常大的减化,下面以处理事务为例来说明这种减化。
按照目前多数据应用程序处理事务的方式,我们可能会写如下的代码:
/// <summary>
/// 获取实体集合
/// </summary>
/// <param name="query">条件</param>
/// <returns>实体集合</returns>
public MenuEntities GetEntities(QueryEntity query)
{
// 事务类
Transaction tx = new Transaction();
MenuDAL dal = new MenuDAL();
MenuEntity menu = new MenuEntity();
MenuEntities menus = new MenuEntities();
try
{
dal.SyncTrans(tx.BeginTransaction());
menus.ConvertFrom(dal.GetEntities(menu, query));
tx.Commit();
}
catch (Exception ex)
{
tx.Rollback();
ErrorHandler.HandleError(ex);
}
return menus;
}
其中,我们的代码要负责打开事务、递交事务、出错时回滚事务等相同的却又大量存在的代码,这是个不小的工作量。
通过应用AOP,我们的代码最终得到非常大的减化,并且功能也得到增强。相同功能的代码使用AOP的方式如下:
/// <summary>
/// 获取实体集合
/// </summary>
/// <param name="query">条件</param>
/// <returns>实体集合</returns>
[Transaction(IsolationLevelEnum.ReadCommitted)] // 用元数据的方式标明AOP
public MenuEntities GetEntities(QueryEntity query)
{
MenuDAL dal = new MenuDAL();
MenuEntity menu = new MenuEntity();
MenuEntities menus = new MenuEntities();
menus.ConvertFrom(dal.GetEntities(menu, query));
return menus;
}
AOP为我们处理的事务递交、出错时回滚,使我们的代码可以真正的做到只关心业务,框架为我们提供了所有为实现业务的而需要的附加功能。