至今Aspect Oriented Programming已经被开发人员所熟知,其简写AOP,译为面向方面编程(也有称面向切面编程)。其产生于90年代Xerox PARC实验室编程范式。被称为oop的延续,oop主要针对业务处理过程的领域问题抽象封装,形成领域对象,更 好的描述自然领域问题。而aop主要处理业务处理过程中处理逻辑步骤分离,减少业务逻辑的耦合性,是的我们的开发人员在开 发过程中只需关心领域的核心实际逻辑。在结构化编程(SP)中提出了SOC(分离关注点),并一直被称为是面对复杂软件最行之 有效的方法之一,并被努力应用于不同的软件实践,比如表现层模式MVC,MVP,PM,面向服务编程SOA,面呈抽象编程等;同样 AOP是SOC的应用,针对领域业务逻辑步骤流程的分离,是的我们能够只关心我们真真的领域核心业务。个人认为AOP是OOP的弥补 ,并非革新。
AOP的实现在鄙人随笔IOC/AOP随笔目录中提起过,主要分为静态植入和动态注入两种方式,主要区别在于 不同的代码时期,编译期和运行时。其实还有第3中实现方式一些常见框架带来的AOP,比如asp.net mvc中的ActionFilter, Handler,通常以模板方法固定流程处理,放出主要逻辑待实现。
AOP 主要包含两个重要部分构成:1匹配规则,在常见 AOP框架实现中,有按照方法,类,程序集,包的名称或者固定特征来精确匹配或模糊匹配,最常用简便的标注java的Annocaton ,.net的Attribute。2hack逻辑。对于AOP是针对方法边界的hack,一个方法对于我们来说有3个可见的边界,进入、结束,异常 。AOP就是在位于这3个边界中插入hack逻辑,实现公用普遍业务的分离。
AOP的应用场景:在缓存,日志,异常处理,复 杂权限、事务,性能计数等有共同普遍流程顺序是逻辑为其主要大显身手的场景。
下面将介绍在我所熟知的集中语言中 的AOP实现:
1:Python
在Python中实现AOP将是最简单的,以为在Python中装潢函数即是天然的AOP,
def aopLogic(f):
def warp():
print("befor....")
f();
print("after...")
return warp
@aopLogic
def myMethod():
print("my method pass!")
def myMethod1():
print ("my method pass!")
myMethod()
print("---------------------")
aopLogic(myMethod1) ()
print("---------------------")
input("finish..")
输出:
python装潢函数以@开头,后边紧跟任意函数。上面是一个无参aop demo,我们可以看出加装潢的myMethod = aopLogic (myMethod(无装潢))。如果针对有参的装潢函数则为,aopLogic(args..)(myMethod(无装潢)).