1.事件的概念
对于事件,我们定义了事件名和事件处理器两个概念,其中事件名和事件处理器是一对多的关系。所以,在触发一个事件时,会触发一系列的处理逻辑,关键是这些处理逻辑在其他事件中可以复用,这就很强大了。事件处理器和事件之间唯一的耦合之处就是绑定,而我们又可以自由地解绑,这是对扩展的开放和对修改的闭合。事件处理器可以复用,这是提高了复用性。
要添加事件这一特性,我们需要实现以下功能:
1).保存事件绑定关系的数据结构
2).绑定事件方法
3).解绑事件方法
4).触发事件方法,触发的顺序问题
5).绑定事件时的数据传递
6).触发事件时的数据传递
其中,事件分为对象级别的事件和类级别的事件。对象级别的事件只能触发自己实例注册的事件,类级别的事件可在不同实例间共享。
2.行为的概念
扩展一个类的行为和属性,首先想到的是继承然后添加方法和属性,其次是使用php的特性trait来扩展。但是,还有另外一种方式提供了扩展类的方式,那就是组合,简单来讲,就是当前类持有另外一个类的实例,自己没有的方法和属性委托给这个实例对应的属性和方法。而我们的行为,就是那个被持有的实例,只不过我们按照我们的规则去定义,并且加入了事件的特性,所以看起来略有不同。
要添加行为这一特性,我们需要实现以下功能:
1).保存行为绑定关系的数据结构
2).绑定行为的方法
3).解绑行为的方法
4).行为中的事件解决方式,包括绑定时注册事件,解绑时删除事件
5).在行为注入后setter和getter特性的实现
ok,今儿个先到这,欲知后事如何,且听下回分解……
github源码:https://github.com/2lovecode/tank