快速业务通道

冒号课堂§3.3:切面范式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
了OOP,而是OOP的一种补充——尽管AOP并不局限于OOP。”

冒号课堂§3.3:切面范式(3)

时间:2011-06-25 BlogJava xyz98

问号的求知欲很强:“AOP实现的机理是什么?”

冒号回答:“如果一个程序是一个管道系统,AOP就是在管道上钻一些孔,在每个孔中注入新的代码流。因此AOP实现的关键是将advice的代码嵌入到主体程序之中,术语称编织(weaving)。这是很自然的——将问题分解之后再合成,问题才得以还原。编织可分两种:一种是静态编织,通过修改源码或字节码(bytecode)在编译期(compile-time)、后编译期(post-compile)或加载期(load-time)嵌入代码——请注意,这里涉及到刚才提到的元编程和产生式编程;另一种是动态编织,通过代理(proxy)等技术在运行期(run-time)实现嵌入。具体的工具包括一些扩展性语言如AspectJ、AspectC++等和一些框架如AspectWerkz、Spring、Jboss AOP等。”

叹号搔着头:“听起来怪复杂的。”

引号倒不在乎:“这些机理是AOP的实现者需要操心的,使用者只需关心AOP是否好用,性能如何等等。”

“为了让你们有更直观的印象,我们借用光学原理来类比。”冒号用幻灯片展示了一幅图——

冒号课堂§3.3:切面范式 - 编程入门网

“众所周知,白光经过三棱镜的折射而分解为七色光,是谓光的色散。再经过一个倒置的三棱镜,七色光又重新会聚为白光。”冒号简述中学的物理知识,“如果把一个复杂的系统看作复合色的白光,经过第一个三棱镜——关注分离器,系统被分解为不同的切面,如同不同的单色的彩光。这些切面经过第二个三棱镜——编织器,再度合成为原系统。”

叹号脸上的迷惘之色渐去:“这下清楚多了。”

句号积极发言:“从中看出,AOP的实施分三步:切面分解、切面实现和切面合成。其中第一步是在设计者的头脑中进行的,第三步是通过AOP的工具实现的,真正需要程序员编码的部分在第二步,即分别实现各切面的advice。”

冒号赶紧补漏:“你好像忽略了切面的另一要素pointcut,如果程序员不指明advice挂靠的切入点,系统如何知道该何时何处调用他编写的执行代码呢?”

句号的嘴张成O状:“是哦,我怎么把这茬给忘了?”

在AOP的议题结束前,冒号不忘指出:“与OOP一样,AOP在带来便利的同时,也增加了一定的复杂度和性能损耗。它们更适用于大中型程序,用在小型程序中则不啻牛刀杀鸡。”

,插语

[1] 耦合(coupling)用来衡量模块之间的依赖程度,聚合(cohesion)用来衡量模块内在的关联强度。它们常用来作为软件质量的评判标准,耦合度宜低,聚合度宜高。

。总结

SoC是Separation of concerns的缩写,指应将关注点分离;DRY是Don’t Repeat Yourself的缩写,指应尽量减少重复代码。

抽象与分解是治愈代码紊乱、松散、重复的良方。

抽象与分解的原则是单一化和正交化,以保障软件系统符合“高聚合、低耦合”的要求。

横切关注点指与程序的纵向主流执行方向横向正交的关注焦点。

接入点是附加行为——建议(advice)的执行点,切入点(pointcut)是指定的接入点(join point)集合,这些接入点共享一段插入代码。切入点与建议组成了切面(aspect),是模块化的横切关注点。

编织是将附加的切面逻辑嵌入到主体应用程序之中的过程。编织分静态编织和动态编织两种。静态编织在编译期、后编译期或加载期嵌入代码,动态编织则在运行期嵌入。

AOP的实施分三步:切面分解、切面实现和切面合成。

OOP只能沿继承树的纵向方向重用,AOP可以沿横向方向重用。

语言之间的天然差别,译者的专业水准、语言

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号