第三只眼看.AOP

转载 2008年09月29日 16:40:00


本文仅介绍了自己对AOP的认识,没有技术含量啊,只是希望自己能够在AOP的大旗下,做个摇旗呐喊的小卒,借本文鼓吹一下AOP。不过,这种鼓吹有点反面的意思,然而却是自己较为冷静的思考。识见疏陋,希望大家不吝赐教。

本文发表与2005年《程序员》第五期,发表时略有删改。

什么是AOP

最初听到AOP这个名词,我总是错觉其与OOP是否具有孪生性?那么,所谓AOP,即面向方面编程(Aspect Oriented Programming),是否是面向对象编程的一种进化呢?关键就在于我们对“方面(Aspect)”的理解。确实,“方面”这个词语是够抽象的,简单地说,它就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理、日志管理、权限控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

对于OOPBruce Eckel有一句名言,“Everything is Object.”确实,在程序的世界里,我们可以将万事万物定义为一种对象,并将这些对象的行为和属性封装起来,同时定义好对象与对象之间的关系。很显然,对于AOP而言,我们无法套用这句名言,妄言“Everything is Aspect.”实质上,AOP只是OOP的一种补充或某种改进,它转换了编程的范式和视角,关注了一直以来被OOP忽略或者说未能解决好的角落,使开发人员可以更好地将本不该彼此纠缠在一起的责任(如银行业务和事务处理)分离开来。通过面向方面的编程,可以将程序的责任分开,对象与方面互不干扰。面向方面的模块并非显式地为对象所调用,而是通过或注入或截取的方式,去获得被封装的对象内部方法间的消息,然后做出相应地处理。也许面向方面的模式破坏了对象的封装,却正其如此,方才能降低模块与模块之间的耦合度。同样地,通过对“方面”的封装,将这些通用的功能从不同的类中分离出来,使不同的模块都能共享同样的“方面”,这也极大地减少了重复代码。

如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。而剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹。

 

AOP,并不具有革命的驱动力

 

个人认为,AOP还谈不上是一种编程的思想,只能说是一种方法而已。溯其根源,一般认为,面向方面编程(AOP)是施乐公司帕洛阿尔托研究中心(Xerox PARC)在上世纪90年代发明的一种编程范式。它在OOP的缝隙之中,抽象出“方面”的概念,目的就是为了打破对象的封装性,以“方面”的方式对原有的模块进行重组,抽取那些与业务无关却为整个系统所通用的功能,最终封装在一起。

那么,最终封装好的这些所谓“方面”,如何被业务对象所调用呢?这就需要“方面”拥有截取封装对象消息的能力。在JAVA世界里,AOP的应用已经走向比较成熟的应用。AspectJSpring,在体现AOP能力上来说,已经渐趋成熟。甚至在JBOSS4.0中,已经引入了AOP框架进行开发,并在权限管理(Authentication)、错误处理(Error Handling)、事务处理(Transactions)、持久化(Persistence)等方面取得了很好的应用。在.Net平台下,对于AOP的应用似乎却走到了后面。在Microsoft 推出的.Net Framework 1.1中,并没有应用AOP,也未曾提供AOP的框架。不过.Net Framework仍然提供了实现AOP的技术可能,即通过.Net Framework的反射机制或.Net Remoting的代理机制获取元数据信息或对象内部间传递的消息。同时,我也看到开源社区中的AOP.Net项目,采用了非托管的.Net Profilling API,它采用了非托管的C++ COM组件,可以在相关事件发生时,通过.Net系统捕获其消息并发送通知。

AOP在企业应用中正逐渐体现其自身的价值。但正如其名,它的作用更多地是关注于系统的某一方面。AOP还缺乏革命的驱动力,并不足以颠覆OOP世界。我们不可能预见AOP之于OOP,象当初面向对象编程取代面向过程编程那样,具有强大至可以颠覆程序员思想的力量。而事实上,AOP从一诞生以来,就从未贴上“革命”的标签。相反,它更多地起到了推波助澜的作用,弥补着OOP的缺失,进而在OO程序设计中,扩展了一种更宽广的模式。

 

AOP,“设计模式”的延续

 

不错,AOP的目的,恰恰就是做了“设计模式”想做却一直未曾做到的功能。GOF的“设计模式”给了我们设计的典范与准则,通过最大程度的利用面向对象的特性,诸如利用继承、多态,对责任进行分离、对依赖进行倒置,面向抽象,面向接口,最终设计出灵活、可扩展、可重用的类库、组件,乃至于整个系统的架构。在设计的过程中,通过各种模式体现了对象的行为,暴露的接口,对象间关系,以及对象分别在不同层次中表现出来的形态。然而鉴于对象封装的特殊性,“设计模式”的触角始终在接口与抽象中大做文章,而对于对象内部则无能为力。

举例来说,我们需要为系统提供日志的能力。虽然我们可以通过装饰模式(Decorate Pattern),提供各种日志的组合,但不可避免的是,大量的日志对象实例代码的存在,导致了重复代码的坏味道,同时也导致了强依赖性,这并不利于模块间的解耦。如果我们通过AOP,将这些日志的功能看作是一个“方面”,然后将系统中需要日志能力的模块置于该“方面”的侦听之中,抽象出来的“方面”好像是一个容器,在其内部的世界里,不分贫富贵贱。只要执行了某种业务,这个容器就会忠实地记录这些模块间传递的消息。至于这些模块到底实现了何种业务,却并非“方面”所关注的。

前面已经叙述到,面向方面编程的价值主要体现在事务处理、日志管理、权限控制等与业务无关,却为业务模块所共同调用的逻辑或责任上,而这些所谓的“方面”,恰恰是企业应用时非常必须的。因此,与其说AOP是一种编程的技术,毋宁说AOP是一种企业的“设计模式”。它弥补了OOP之拙,却未曾也不可能超越OOP而单独存在。

第三只眼看AOP

 什么是AOP?最初听到AOP这个名词,我总是错觉其与OOP是否具有孪生性?那么,所谓AOP,即面向方面编程(Aspect Oriented Programming),是否是面向对象编程的一种进化呢?...
  • lujing_angelar
  • lujing_angelar
  • 2008年08月21日 13:55
  • 389

AOP入门系列(2)---第三只眼看AOP

 文章来自Wayfarers Prattle,版权归Wayfarers Prattle所有本文仅介绍了自己对AOP的认识,没有技术含量啊,只是希望自己能够在AOP的大旗下,做个摇旗呐喊的小卒,借本文鼓...
  • zuoluoboy
  • zuoluoboy
  • 2009年04月02日 00:13
  • 1137

第三只眼看CRM市场

  2003年,大部分专业CRM产品供应商没有扭转亏损的局面,市场熊市依然延续。但据权威机构统计:2003年我国CRM市场销售总量不到2亿元,跟国外相比,现有市场渗透率还不到2%。从中我们可以读出两层...
  • runwellcrm2
  • runwellcrm2
  • 2010年04月07日 17:16
  • 493

用第三只眼看生活

用第三只眼看生活生活中总有这样或那样的不如意,可是我们该如何面对呢?有些人沮丧,有些人抱怨,有些人灰心丧气,有些人甚至对生活失去了信心。生活真的有那么糟糕吗?请您看了下面这段话再回答我。  我有外债,...
  • shc000
  • shc000
  • 2010年03月03日 11:33
  • 62

第三只眼看Linux和Windows

文章中出现禁止的词语,系统不予接受。有没有搞错!第三只眼看Linux和Windows
  • redvalley
  • redvalley
  • 2004年10月18日 23:40
  • 627

第三只眼看中国网游( On The Outside, Looking In )

转自:http://hi.baidu.com/welflau/blog/item/a0905d2cb64986eb8a139985.html作者:杰西卡·玛丽甘( Jessica Mulligan )...
  • Betty_Ting
  • Betty_Ting
  • 2011年03月06日 00:55
  • 855

删除wmspdmv监控进程-- 背后的眼睛

第三只眼的进程分布:C:\WINDOWS\system32\imjmipg.exeC:\WINDOWS\system32\igfxtax.exeC:\WINDOWS\system32\wmspdmv....
  • keke0307
  • keke0307
  • 2011年07月19日 12:25
  • 4420

第三只眼看财务-留存收益与职业道德

留存收益概述   留存收益是公司在经营过程中所创造的,但由于公司经营发展的需要或由于法定的原因等,没有分配给所有者而留存在公司的盈利。留存收益是指企业从历年实现的利润中提取或留存于企业的内部积累,它...
  • zhongguomao
  • zhongguomao
  • 2017年02月09日 09:19
  • 320

第三只眼企业计算机监控管理系统v7.3.0已注册破解版

您的员工上班工作认真么?还是利用上班时间玩游戏?浏览与工作无关的网站?甚至利用聊天工具泄密?将公司机密资料拷贝带走?...     第三只眼企业计算机管理系统:让您对公司的所有计算机的使用情况了如指...
  • mfsuncom
  • mfsuncom
  • 2017年10月26日 16:29
  • 241

第三只眼网络监控软件简单分析,试用及清除

总体感觉:界面很漂亮,功能很多,操作界面比较人性化,但性能很差,而且不是一般的差,尤其是实时临控时值传输的图片,根本没做任何算法上的优化,初步断定是VB写的以下只是简单分析,并不包括安装客户端所产生的...
  • siow
  • siow
  • 2008年03月02日 18:52
  • 6279
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第三只眼看.AOP
举报原因:
原因补充:

(最多只允许输入30个字)