You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Aspect Oriented Programing : AOP addressed the problem of cross-cutting, which wolud be any kind of code that is repeated
in different methods and can't normally be completely refactored into its own module, like with logging or verification.
So, with AOP you can leave the stuff out of the main code and define it vertically like so:
//pseudo codefunctionmainProgram(){varx=foo();doSomethingWith(x);returnx;}aspectlogging{before(mainProgramiscalled){log.Write("entering mainPrograming");}after(mianProgramiscalled){log.Write("existing mainProgram with return value of "+mainProgram.returnValue);}}
And the an aspect-weaver is used to compile the code into this:
functionmainProgram(){log.Write("entering mainPrograming");varx=foo();doSomethingWith(x);log.Write("existing mainProgram with return value of "+x);returnx;}
Benefit of AOP :
The logic for each concern is now in one place, as opposed to being scattered all overt the code base.
Classes are cleaner since the only contain code for their primary concert(or core functionality) and
AOP
伪代码演示
Aspect Oriented Programing : AOP addressed the problem of cross-cutting, which wolud be any kind of code that is repeated
in different methods and can't normally be completely refactored into its own module, like with logging or verification.
So, with AOP you can leave the stuff out of the main code and define it vertically like so:
And the an aspect-weaver is used to compile the code into this:
Benefit of AOP :
The logic for each concern is now in one place, as opposed to being scattered all overt the code base.
Classes are cleaner since the only contain code for their primary concert(or core functionality) and
secondary concerns have been moved to aspects.
AOP 的理解
AOP
:Aspect Oriented Programming
是一种能在现有面向对象编程基础上,将我们项目中后续需要动态扩展的内容,实现程序修改的最小化。
OOP
和AOP
以及 设计模式OOP
:是我们项目设计的基本标准、方法、技巧、经验的一个综合。不管在哪个环节,都会使用OOP的这些内容,去指导我们设计和写程序。
设计模式
:在OOP
基础上对于特殊的问题,但是这种特殊问题,又经常出现,而总结的一套经验,在任何一个设计模式中我们都会处处体现
OOP
的思想AOP
:其实就是在前面OOP
+设计模式的情况下,如果某些问题,还是不能很好的解决,我们可以进一步的基于AOP思想来完善。
AOP 使用场景
在什么情况下,我们需要使用AOP方式呢?
功能性业务:比如你做一个具体的根据相关条件的查询,或者插入、修改某些记录....
比如银行业务:当你开一张银行卡的时候,银行会把你的个人信息,在银行的数据库中,增加一条记录。
再比如,你取款,每次取的时候,在银行的系统中,都会增加一个取款相关的记录。
以上都是功能性业务。
系统级业务:比如你开卡的时候,同时会给你增加短信提醒。还有你取款的时候,同时会有相关的验证
AOP 的几种实现方式
首先,我们做一些准备工作:
Main
方法中的调用:1. 基于装饰器模式实现
AOP
装饰器设计模式充分体现AOP思想
装饰概念:就是对一个东西的“包装”和“点缀”。
Main
方法中的调用:缺点:虽然装饰器设计模式,能够很好的体现AOP思想,但是实际的应用价值并不是很高,因为这个装饰器类,是固定某个功能
性接口的。而不具有通用性。对应批量的系统级功能的扩展,显然存在缺陷。
2. 基于代理方式实现
解决问题:其实就是针对装饰器设计模式的不足,而且提供的一种工具。
步骤实现:
【1】同样需要一个接口实现类(和装饰器模式几乎是一样的,但是有一个小区别,那就是多了一个继承)
【2】添加一个代理实现类,和一个业务代理对象创建类
基于远程代理实现业务扩展
Main
方法中的调用:3、使用第三方框架实现
对比发现:使用第三方框架,比前面的系统代理类更简单。我们可以根据自己的需要,寻找更多的,更好用的第三方框架。
功能性业务
例如
Castle Core
Main
方法中的调用:Castle使用的问题:
【1】 本框架不针对具体的业务做扩展,而是一种通用扩展。也就说通过代理类创建的对象,在调用的时候,所有的行为都会被
自动的切入系统级业务。
【2】解决方法:只有需要扩展这些业务的地方,我们才使用代理框架产生对象,如果不需要,请使用原有的对象。
【3】事务一分为二:这种通用扩展也有好处,比如我对功能性的某些业务,做批量的切入,(日志、缓存等)
这时候我们写一个拦截器,你会发现所有的功能性业务都会自定切入。
其他第三方
AOP
工具举一反三...
The text was updated successfully, but these errors were encountered: