关于AOP
Aop的横切,可以将核心业务逻辑抽离出来, 可以在以下类似情况使用如日志、权限、数据持久
attribute 方式实现:
[log]
[rosle]
public void test(){} 的形式, 然而此种形式如何传递上下文?
例如不用Aop则应该如此
public void test()
{
if(User.isRosle){
try{
//核心 逻辑代码
//核心逻辑代码
}
catch{
Log.execl("...");
}
finall{Log.execl("....");}
}
}
由此可以看到如果利用attribute 可以看到 把User.IsRosle的属性或方法放入到特性中,然而通常需要(业务逻辑时可能需要 将核心业务逻辑 ,也有可能不需要涉及核心业务逻辑,因为如果涉及核心逻辑的上下文,不合适AOP设计原则,但仍旧涉及一定的上下文)的上下文的注入。
目前在.Net下实现AOP的方式分为两大类:
一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代或修饰原有对象行为的执行;
二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。
动态代理实现方式利用.Net的Attribute和.Net Remoting的代理技术,对对象执行期间的上下文消息进行截取,并以消息传递的方式执行,从而可以在执行期间加入相关处理逻辑实现面向方面的功能(请参考:http://www.cnblogs.com/wayfarer/articles/256909.html);
而静态织入的方式实现一般是要依靠一些第三方框架提供特定的语法,例如PostSharp,它的实现方式是采用 MSIL Injection和MSBuild Task在编译时置入方面的代码,从而实现AOP。