当前位置:编程学习 > asp >>

AOP的一些概念和LOOM.NET

面向侧面的程序设计(aspect-oriented programming,AOP,又译作面向方面的程序设计、观点导向编程)是计算机科学中的一个术语,指一种程序设计范型。该范型以一种称为侧面(aspect,又译作方面)的语言构造为基础,侧面是一种新的模块化机制,用来描述分散在对象、类或函数中的横切关注点(crosscutting concern)。
以上是AOP在维基百科的概念,抽象晦涩。下面写一点本人的理解。如有错误,欢迎指出,不甚感激。
AOP中的涉及到的概念很多,眼花缭乱。但是AOP的思想却是很简单。就是分离代码。将最常用的,全局的方法分离出来,横向穿插到系统主干代码中。所谓横向穿插,就是这些代码并不是直接在主干代码中调用,而是通过某些机制,(比如反射等),在定义好的连接点处触发这些代码。连接点其实就是定义了何时触发代码。
AOP通常用在实现捕获异常,追踪异常,安全校验和失败注入等。在OO编程中,类和方法设计成执行专门的操作,一些常用的方法都被分散到公共类中。然而,有很多 (横切关注点)cross-cutting concerns穿越所有的类和方法,比如记录日志,权限检测。OOP中,用户定义不同的日志类和权限检测,在需要记日志或者权限校验的类或者方法中,调用这些日志类和权限类,部分的解决了这些问题。采用AOP,可以优雅的解决掉这些问题。
AOP中所谓的“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。通俗的说,就是把那些用来横插的函数,封装起来,在特定的时候就调用这些函数。因此,方面也就可以理解为用来横插的函数的封装库。这些方法在连接点处和目标方法编织。所谓编织,就是调用目标方法,必定会触发横插方法。
AOP中编织的方式有2种。分为动态和静态。
静态AOP系统诸如AspectJ,在编译时或者载入的时候编织 。 编织后的方面不能在运行时删除或者配置。静态编织通常通过实现MSIL或者字节码的重写来实现。
动态AOP系统可以在运行时编织方面。程序员在程序运行的时候动态的配置方面。
AOP系统的典型实现,无论静态编织还是动态编织,通常都是在执行点插入钩子(hook)。
这个执行点就是所谓的连接点。程序执行到连接点。钩子会拦截程序,并调用一段称作通知(advice)的代码。不同的通知可关联不同的切入点。一个方面就是一对切入点和通知。
静态编织的AOP中,hook通常由内嵌在代码中,通过静态翻译源代码或者字节码植入。
带编织的AOP,必须在每个连接点检测是否需要执行通知(advice)。在动态AOP中,所以的连接点都依赖于执行上下文,因为连接点是在运行时指定,有时还是动态的改变。因此,在连接点被改变后,必须重新检测是不是需要执行通知。
目前成熟的AOP语言要数AspectJ,是用于Java的。.NET中,比较成熟的比如 AspectDNG, Aspect#,PostSharp ,LOOM.NET。
LOOM.NET是一套开源的AOP系统,它有同时支持动态编织和静态编织。
动态编织的话,通过引入 RapierLoom.dll 程序集,编织过程在运行时由一个工厂类初始化。初始化的时候通过Create or CreateInstance 方法生成编织对象。
静态编织的话,编织过程发生在编译后。通过Gripper-LOOM.NET,在生成的程序集中重写入一些额外的“胶水代码”。编织步骤如下:首先生成.NET程序集,再对程序集运行命令行gl.exe。
clipboard
补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,