什么是AOP(Aspect-Oriented Programming)?
AOP允许开发者动态地改削静态的OO模型,结构出一个能够不停增长以满足新增需求的系统,就象现实世界中的东西会在其生命周期中不停转变自身,应用措施也可以在成长中拥有新的成果。
AOP操作一种称为“横切”的技术,剖解开封装的东西内部,并将那些影响了多个类的行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,
却为业务模块所配合挪用的逻辑或责任,例如事务措置惩罚惩罚、日志打点、权限控制等,封装起来,便于减少系统的反复代码,降低模块间的耦合度,并有利于未来的可操纵性和可维护性。
AOP技术素质
AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向东西编程)的增补和完善。OOP引入封装、担任和多态性等观点来成立一种东西条理布局,
用以模拟大众行为的一个调集。当我们需要为分手的东西引入大众行为的时候,OOP则显得无能为力。也就是说,OOP允许你界说从上到下的关系,但并不适合界说从左到右的关系。例如日志成果。
日志代码往往程度地散布在所有东西条理中,而与它所散布到的东西的核心成果毫无关系。对付其他类型的代码,如安适性、异常措置惩罚惩罚和透明的连续性也是如此。这种散布在遍地的无关的代码被称为
横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的反复,而倒霉于各个模块的重用。
而AOP技术则恰恰相反,它操作一种称为“横切”的技术,剖解开封装的东西内部,并将那些影响了多个类的大众行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,
就是将那些与业务无关,却为业务模块所配合挪用的逻辑或责任封装起来,便于减少系统的反复代码,降低模块间的耦合度,,并有利于未来的可操纵性和可维护性。AOP代表的是一个横向的关系,
如果说“东西”是一个空心的圆柱体,此中封装的是东西的属性和行为;那么面向方面编程的要领,就好像一把利刃,将这些空心圆柱体剖开,以获得其内部的动静。而剖开的切面,也就是所谓的“方面”了。
然后它又以巧夺天功的高手将这些剖开的切面回复复兴,不留陈迹。
使用“横切”技术,AOP把软件系统分为两个部分:核心存眷点和横切存眷点。业务措置惩罚惩罚的主要流程是核心存眷点,与之关系不大的部分是横切存眷点。横切存眷点的一个特点是,他们经常产生在核心存眷点的多处,
而遍地都基真相似。好比权限认证、日志、事务措置惩罚惩罚。Aop 的感化在于疏散系统中的各类存眷点,将核心存眷点和横切存眷点分分开来。正如Avanade公司的高级方案构架师Adam Magee所说,
AOP的核心思想就是“将应用措施中的商业逻辑同对其供给撑持的通用处事进行疏散。”
实现AOP的技术,主要分为两大类:一是给与动态代办代理技术,操作截打动静的方法,对该动静进行装饰,以代替原有东西行为的执行;二是给与静态织入的方法,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有
关“方面”的代码。然而殊途同归,实现AOP的技术特性倒是不异的,分袂为:
1、join point(连接点):是措施执行中的一个精确执行点,例如类中的一个要领。它是一个抽象的观点,在实现AOP时,并不需要去界说一个join point。
2、point cut(切入点):素质上是一个捕获连接点的布局。在AOP中,可以界说一个point cut,来捕获相关要领的挪用。
3、advice(通知):是point cut的执行代码,是执行“方面”的具体逻辑。
4、aspect(方面):point cut和advice结合起来就是aspect,它类似于OOP中界说的一个类,但它代表的更多是东西间横向的关系。
5、introduce(引入):为东西引入附加的要领或属性,从而到达改削东西布局的目的。有的AOP工具又将其称为mixin。
上述的技术特性构成了根基的AOP技术,大大都AOP工具均实现了这些技术。它们也可以是研究AOP技术的根基术语。
1.C# 手动实现实现静态代办代理 <AOP在要领前后增加自界说的要领>