yui3的的AOP(面向切面编程面向切面编程)和和OOP(面向对象编程面向对象编程)
首先请把手放胸前成沉思状:我上了生活,还是被生活上了自己?
没想出答案把,恩,可以读下文了。从语义角度讲,同一事物的不同表述可以反映人的主观视角的不同,从哲学角度将,世界
观影响方法论,我们看事物的角度不同,有时会得出截然相悖的结论,从而会影响我们的做事方式和行为准则,现实生活如
此,在丰富多彩的编程语言中更是如此,编程模式充满了对现实世界的各种模拟,包括是面向过程,面向对象,还有面向切
面。我们大概已经非常熟悉面向过程和面向对象,切面的英文是Aspects(有时译作方面,我感觉用切面更能贴切的表达
Aspects的内涵)。
有关AOP的链接看这里:
http://en.wikipedia.org/wiki/Aspect-ori … rogramming
YUI3中的自定义事件实现了AOP
http://developer.yahoo.com/yui/3/event
什么是切面?举个简单的例子,每天我们上下班挤地铁坐公交和女朋友约会上网吧打游戏去电影院看电影……,一天要做很多
事情,每个人都是一个Object,我们做的每件事情都是这个Object的方法,比如,
甲.上班();
乙.坐地铁();
丙.看电影();
其实可以换个角度看,公司需要员工来上班,轨道交通需要每个人去乘坐,电影院给每个人放电影。这样就变成了:
公司.need(甲)
地铁.carry(乙);
电影院.放电影给(丙);
这样看来,不仅甲乙丙每个个体都是一个对象,公司、地铁、电影院也是对象,这种抽象就是传统的面向切面。而在js编程
中,程序一般都不大,所以大概不会到达非要使用切面级别的抽象的程度。但其基于事件驱动的原理则很容易让人联想到
AOP,上个例子在js中就可能是:
someone.dosth();//OOPobject.fire('event',someone);//AOP
如果脱离上下文来看,上面的代码依然语义牵强。只是很多js框架把切面编程的边缘特性封装成方法,对人造成了很多误导。
比如事件的绑定。当函数foo执行结束的时候执行myfoo,在不修改foo的基础上来添加对foo的监听,
var foo = function(){
//some code here
};
jQuery.aop.after(foo,function(){
//added code here
});
jquery和prototype都实现了这种简单的函数绑定。jquery的aop在这里。但在yui3中,AOP则被提升至自定义事件的一种内在
机制,在源码中随处可见。这在理解yui3的代码重用机制是很有帮助的。也正是得益于这种抽象使得yui3的自定义事件异常强
大和灵活。和OOP相比,AOP的优点是非侵入式的“装饰”,但在多数情况下,并不推荐首先使用AOP来写代码。来看这个例
子:每个人的生活习惯很类似,这里用四种行为为例,上学,放学,泡妞,打游戏,甲的生活规律很正常,每种事件发生的概
率是一样的,乙是个贪玩的小孩,只会去网吧打游戏和泡妞,丙是一个爱学习的小孩,从不泡妞和打游戏,丁是一个经历超级
旺盛的另类,每次都是同时干两件事情,上学的时候泡妞,放学的时候打游戏。这里用div代表每个人,用onmouseover来触
发每个事件。
用OOP的方法那么程序结构应该是这样:
评论0
最新资源