Zend框架源代码研究:zend框架内部执行原理事件驱动原理

Zend框架2.0版本对1.0有本质上面的改变,其中之一是对各个组件的驱动方式进行了重大的修改。在1.0版本中,组件是通过时间顺序方式依次启动,以及通过编写插件的方式启动第三方组件。这种方式虽然简单,但是缺少灵活性,也不便于各个组件的相互解藕。因此2.0版本引入了一个新的机制,那就是非常流行的Event-Drivened所谓的事件驱动机制,这个机制在很多的其他的技术中,如flash开发,winform,js,android很多地方都已经普遍使用。他的引用原理其实很简单,来源于设计模式中的,跟踪者模式。

先说说什么是跟踪者模式:

为了简化说明,先定义两个类,一个是负责监视,一个被监视。


// 定义一个监听者类
class listener{ 
       function onClick(){ 
          echo 'I have clicked!"; 
       }
}
// 定义一个被监听的类
class listened{
       public $listeners;
       // 注册一个一个监听者
       function register(listener $listener){
               $this->listeners[] = $listener;
       }
       // 执行一个动作
       function triggle(){
            foreach($listeners as $listen)
            {
                   $listen->onClick();
            }
      }
 }
// 最后执行下类的使用
$listened = new listened();
$listened->register(new listener());
$listen->click();
其实整个设计模式的原理如图所示,其实就是把被监听者所要执行的动作交由监听者去执行,或者是在被监听者进行某些执行动作的时候,触发监听者的相关动作。这有几个方面的好处,其中之一是便于解藕,被监听者可以随时根据需要注册监听者,然后无论在何时何地触发了某个动作,相应的监听者的对象的方法就会被触发。其次是,符合了人类思考事物以及自然世界原有的事件规律。我们的世界往往都是因为一件事情而引发另外一件事情。这种机制符合了我们思考问题的自然思维。所以使用事件驱动方式开发整个系统,就有非常大的方便设计的优势。事实上,以上的例子只是一个非常简单的案例。跟踪者模式具体还会有很多的变种。比如在事件驱动模式中,会进行一个更复杂的变化,一般会引入一个第三方的类,这个类叫做event事件类,和event事件管理器,其实主要的作用就是,把被驱动的双方,也就是监听者和被监听者之间相关的一些依赖信息,环境信息都委托给第三方去管理,这样能够更好的进行指责划分以及减少双方的相互依赖,专注本身的业务逻辑。其中,event事件类一般是携带事件发生的环境信息,并且一般都会传递给监听者类,监听者类通过接受一个event类来判断响应的是什么事件,其次是获取额外的参数信息。其次是,event 事件管理器,顾名思义,它的作用就是管理事件的相关事务,最重要的功能包括触发事件,还记得上个例子的代码中,listened的代码中的click方法中,foreach方法具体的就是内容就是循环执行所有的监听者动作,其实这个部分业务完全就可以交给事件管理器来做,除此之外,register中注册监听者的方法也可以交给第三方的事件管理器来做。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值