您的位置:首页 > 移动开发 > Unity3D

Asp.Net大型项目实践(7)-用Unity实现AOP之事务处理+为啥要用AOP(附源码)

2010-01-08 08:43 756 查看
  在目录中我计划对权限管理,异常管理,事务管理,日志管理,异常管理等项目中AOP典型应用场景进行详细的描述,本篇我们用Unity的Interception来实现项目中的事务处理。

为啥要用AOP
由于这是第一篇写关于AOP的场景,所以我觉得有必要通俗的说明一下在项目中使用AOP的好处。按照弦哥的惯例,关于AOP大套的理论大家自己去google吧,我下面举一个通俗的例子来说明。比如在项目中我们有一个业务逻辑的方法:

    public void 我是一个干净的业务逻辑方法()
{
我的N行业务逻辑代码....
我的N行业务逻辑代码....
我的N行业务逻辑代码....
我的N行业务逻辑代码....
}


我们可以看到他相对来说“很干净”,只有他本身应该内聚的业务逻辑。
接下来项目要求这个干净的业务逻辑方法 需要支持:拦截异常并向上层重新抛出异常;记录异常日志;记录操作日志(如操作人,操作时间,执行时间等..);因为里面多次更新数据库要绑上事务回滚;要进行权限控制。于是乎他变成了下面这样一个“不干净”的业务逻辑方法:
代码

public static class ContainerFactory
{
public static IUnityContainer GetContainer()
{
IUnityContainer Container = new UnityContainer();

ExeConfigurationFileMap infraFileMap = new ExeConfigurationFileMap();
infraFileMap.ExeConfigFilename = HttpContext.Current.Server.MapPath("~/unity.di.infrastructure.config");
UnityConfigurationSection infraConfig = (UnityConfigurationSection)ConfigurationManager
.OpenMappedExeConfiguration(infraFileMap, ConfigurationUserLevel.None)
.GetSection("unity");
if (infraConfig.Containers.Default != null)
{
infraConfig.Containers.Default.Configure(Container);
}

//上面是上篇讲的DI依赖注入XML文件的读取,下面是本篇讲的AOP的XML文件读取
ExeConfigurationFileMap infraAopFileMap = new ExeConfigurationFileMap();
infraAopFileMap.ExeConfigFilename = HttpContext.Current.Server.MapPath("~/unity.aop.infrastructure.config");
UnityConfigurationSection infraAopConfig = (UnityConfigurationSection)ConfigurationManager
.OpenMappedExeConfiguration(infraAopFileMap, ConfigurationUserLevel.None)
.GetSection("unity");
if (infraAopConfig.Containers.Default != null)
{
infraAopConfig.Containers.Default.Configure(Container);
}

return Container;
}
}


在Facade层把Services层接口简单“包装”一下,然后就可以在Presentation层(Asp.Net MVC的Controller)使用了,代码我就不写了,上篇和前几篇都有讲过了

源码:所有实现代码都贴出来了,且也偷了下懒没按照惯例写我们“土土的测试”。写下篇的时候再上源码吧:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐