第7课:AOP面向切面编程

Aspect Oriented Programming面向切面编程。
解耦是程序员编码开发过程中一直追求的。AOP也是为了解耦所诞生。
具体思想是:定义一个切面,在切面的纵向定义处理方法,处理完成之后,回到横向业务流
举个例子:当有一个类的方法来完成某个功能,但是这个功能完成之后,会有数据过滤,写日志,修改关联表,安全监测,事务处理等等一系列操作
而这些操作和这个功能本身又是无关的,如果直接在功能代码里写这些额外的功能,代码臃肿不说,耦合比较严重,维护比较困难,AOP就是解决这样的问题
还有一个例子,比如功能页面访问,都要判断用户是否登录,当然有很多解决方案,用AOP是其中一个比较好的方案,可以直接把判断用户登录注入到功能方法里,在方法外面只要写一个判断登录函数或方法即可

至于AOP的使用,当然是遵从不重复造轮子的原则,如果对应语言有现成的框架或者扩展,直接使用

下面给出一个PHP的AOP编程例子,使用的是PHP-AOP扩展,重点是理解下AOP的思想,而不在于代码
<?php
class MyServices
{
	public function doAction1() {
		echo "Call doAction1\n";
	}

	public function doAction2() {
		echo "Call doAction2\n";
	}
}

function aopForAction1() {
        echo "AOP[1] Run\n";
}

function aopForAction2() {
        echo "AOP[2] Run\n";
}
aop_add_after('MyServices->doAction*()', 'aopForAction1');
aop_add_after('MyServices->doAction*()', 'aopForAction2');
$o = new MyServices;
$o->doAction1();
$o->doAction2();

执行结果:
Call doAction1
AOP[2] Run
AOP[1] Run
Calling doAction2
AOP[2] Run
AOP[1] Run