AOP重要吗

原创 2003年08月24日 16:59:00

AOPAspect-Oriented Programming)这个领域还很新,不过我乐观地预计,将来很多大项目会采纳AOP方法。在我看来,AOP是非常重要的方向,可能会是软件开发方法发展道路上的“下一个大家伙”。当然,AOP并不是一种取代性的技术,就像现在电视没有取代收音机,电脑也没有取代电视。不过采用AOP方法后,现在许多模式就不再需要了(当然也会出现一批新的模式),软件开发过程也将会改观。

在我看来,软件开发很大程度上是从需求到实现的映射过程。用户不会在意这个系统用了哪些技术,他只会在意系统能否满足他的需求。但是系统构建者的知识结构却是以各种技术为核心的,有人擅长信息安全技术,有人对负载平衡和容错技术具有深厚知识,还有人是数据库专家。如何有效地把需求映射到实现是各种软件开发方法的核心论题。AOP的三菱镜隐喻很好地说明了AOP在这个映射中扮演何种角色,这里不好贴图我就不具体说了。 

关注点(concern)的分离,可以让不同的人专注于不同的事(且是他/她擅长的事)。安全专家就带着他的团队编写事关系统安全的那个aspect好了,系统集成专家可以负责与遗产系统整合的相关部分,业务专家则可以集中注意力于business domain。那么构架师呢?他(她)可以负责总体构架,协调如何把这些各自独立的aspects编织(weave)成一个能跑的应用程序。(可以在源代码层编织,也可在byte code层编织。) 

我喜欢AOP的理念,但任何技术都不能只停留在理念,其早期实现是非常重要的,甚至关系到技术的存亡。有很多很好的技术,因为一开始没有很好地实现,只好埋入了废纸堆。不仅IT技术如此,自然科学理论也是如此,优秀的理论常常需要实验科学家来验证。(举个例子,我们熟知的两位著名华裔诺贝尔奖获得者身后站着一位优秀的华裔实验科学家,这是众人皆知的美谈。)目前实现AOP的语言中最著名的当属Xerox PARC开发的AspectJ(现移交Eclipse)。我感觉,AspectJJava的关系有些类似于当年C with Classes(后来发展成C++)和C的关系;目前的AspectJ的实现也可类比于当年的CFront。当然,我这样说只是一种感觉而已 :) 

曾有人把AOPInterception类比。或许用Interception模式可以模拟AOP吧,但是这不能表示“没必要提出一个新的paradigm”。请问,用C可以模拟C++吗?用struct和函数指针可以模拟class吗?我猜想许多高手可以做到。那么为什么还要有C++OOP呢? 

AOP的编织规则的power不是Interception可轻易实现的。用来指定编织规则的语言和写aspect的语言可以完全不同,不过一般采取的方案是把写aspect的语言后者略作扩展后作为weaver rule specification languageAspectJ就是这样做的。现在也有AspectCAspectC++。这种做法又让我想起了OOP implementationC++中的引入。C++C语言做了扩展,增加了class, private, public, friend, virtual这些新的内容来描述制定类和类间关系的规则,如果没有这些新的关键字,这个规则可不是那么好表述的。而C语言原来的部分也没有被废弃。你看,在成员函数中的如果不定义新的局部类的话,那么不就是差不多用C语言写每个成员函数吗?AspectJ也是如此。你用Javaaspects,用扩展了的Java语言(或者看作新语言也无妨)写weaving rules。这符合用最合适的语言做最适合的事的原则。 

回到AOPInterception的比较。Interception的实现往往是动态的。如果规则的粒度比较粗,指定的interception的粒度又比较细(比如说,一刀切地规定在所有函数的入口和出口intercept),那么效率损失不可忽略。 我举个简化例子,在每个函数第一行和最后一行加上“判断一个intercept函数指针是否为NULL,如果不是NULL就调用它”的代码,那么要做多少次判断呀,其中又有多少次是无功而返呢?而AOP weaver可以静态地编织代码(源代码或者byte code),就不需要付出这一额外代价了,而且intercept的粒度可更加细化。 

此外,我感觉用Interception模式,关注点没有很好分离。不像AOP,甚至可以由不同的人用两种语言来做implement aspectweave aspects这两件事,关注点分得非常清晰。 

另外,关于AOP和设计模式,我有一些想法:从不同的编程语言中可以提炼出不同的代码模式(idioms,又译为惯用法),但代码模式是同特定语言相关的,可能有些模式较为通用,但也有些模式在别的语言中就不再需要。比如reference counting模式在支持GC的语言中就不再必要了吧。这不是说代码模式不好,更不是说有了模式,GC就不再必要,只不过是各得其所罢了。不能因为熟悉模式并运用自如就认为新技术没必要。代码模式如此,那么设计模式又何尝不是呢,有些模式比较通用,但也有一些设计模式是和范型相关的,其中又多数以OO相关,没有超脱于OO的框架。(不信?你用C语言或者其他非OO语言实现一遍GoF中的23个模式,看看难度如何,实现是否很自然?POSA v1,v2中的模式可作补充练习。)如果改用AOP,那么很多模式也可自然消亡了,比如interception模式应该就是吧。 

以上只是随便说了一些对AOP的个人不成熟看法,抛砖引玉。欢迎大家讨论。

 

AOP——SpringAOP(最重要)

http://www.cnblogs.com/solverpeng/p/5628100.html 一、AOP: 是对OOP编程方式的一种补充。翻译过来为“面向切面编程”。 可以理解为一个拦截...
  • qq_16605855
  • qq_16605855
  • 2017年06月19日 12:50
  • 82

AOP重要吗?

AOP重要吗?iteer 于-->
  • duoshanx
  • duoshanx
  • 2004年12月30日 16:44
  • 954

AOP(Aspect-Oriented Programming)重要吗?

AOP(Aspect-Oriented Programming)这个领域还很新,不过我乐观地预计,将来很多大项目会采纳AOP方法。在我看来,AOP是非常重要的方向,可能会是软件开发方法发展道路上的“下...
  • akeen
  • akeen
  • 2006年06月10日 15:31
  • 789

学计算机专业的学生一定要过英语四级才混的开吗

 我初中起就没怎么上过英语课,后来也不知道怎么就混进了大学。我学的是计算机专业,我看到很多介绍经验的都自称是英语的高手,我现在一点英语也不懂,我以后该怎么混呀?...
  • lw6333359
  • lw6333359
  • 2008年03月15日 12:19
  • 385

绩点的重要性,随性而写

我是一个坐不下来认真学习,自认为有几分小聪明的自负狂。个人觉得上面三个形容都很贴切,虽说不太好听。回想起来,我从小学到现在就没有认真学习过,我是抱着对数学一种先天性领悟优势和无由来的喜欢然后玩玩的心态...
  • u013887867
  • u013887867
  • 2015年01月31日 23:36
  • 712

C++ STL template 重要吗?

此前,在网上学习和朋友交流已经明白那些常用的模板原理,但我不满足对知识的模糊理解,我想透彻理解这些东西,决心拿出我的法宝继续学习,但至少目前来看,会造template越来越少了,学好template还...
  • what951006
  • what951006
  • 2016年12月31日 16:35
  • 632

Servlet需要注意的细节(重要)

Servlet开发注意细节 1、Servlet访问URL映射配置   由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个U...
  • m0_37882178
  • m0_37882178
  • 2017年05月08日 10:00
  • 92

关于前端的思考和感悟

最近几年对于web前端的传闻很多,比如人才稀缺,简单易学,待遇丰厚,整体势头发展良好等等。遇到过一个不太熟搞后台开发的同事跑来问我学习前端需要掌握哪些内容,也听说过一个搞IOS开发准备自学前端半个月然...
  • wu_Duo
  • wu_Duo
  • 2016年05月17日 13:32
  • 379

最令员工讨厌的考勤有必要吗?

     上个月的时候,人力资源部给我发了本月的员工考勤记录,突然发现,我们部门的同事的考勤真的是惨不忍睹,缺少考勤资料总数的竟然达到了40多天,就是我自己,好像也少了四天的考勤。    由于公司目前...
  • Drate
  • Drate
  • 2006年04月15日 13:47
  • 2901

全国软件考试到底重不重要啊??哪位能告诉我

 我参加了12月份的软考,报的是中级的软件设计师,上午是选择题,不多说,买一本软件设计师大纲书,多看看,背背,估计差不多了,下午是填空题,前3道题目是流程图类型的,感觉像看图说话似地,并不很难,第4题...
  • dahanzhizi
  • dahanzhizi
  • 2009年11月24日 09:10
  • 164
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AOP重要吗
举报原因:
原因补充:

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