AOP 编程思想的新方面吗

ZDNet软件频道 时间:2005-05-24 作者:Simon Sharwood |  我要评论()
本文关键词:developtrend aop
在程序员的圈子里面,有一群人数很少但态度却十分坚定的开发人员。当他们宣称,真正的程序员会编写自己的驱动程序。因为如果不这样,那么采用任何其他的方式都将会是疯狂和缺乏技术理性的,并且还会承担一些不必要的风险。

在程序员的圈子里面,有一群人数很少但态度却十分坚定的开发人员。当他们宣称,真正的程序员会编写自己的驱动程序。因为如果不这样,那么采用任何其他的方式都将会是疯狂和缺乏技术理性的,并且还会承担一些不必要的风险。

在软件行业的另一端,人们却在为类似于面向方面编程(Aspect Oriented Programming即aop)的技术欢呼雀跃。他们以非常严肃的态度说道,真正的程序员希望尽可能的保持多产,这样才能稳住自己的饭碗。相对于对自己工作方式三天两头的革新,这些程序员们更希望能开发更多的程序和更为有效的对代码进行重用。

aop是从什么地方来的?

多年以来,面向对象(OO)时编程技术革新的先锋,但是,即使是针对不同功能编写分离代码片段的面向对象思想也无法将程序开发人员从一遍遍重写应用程序多个部分的烦恼中解脱出来。

来自Xerox Palo Alto Research Lab(即PARC)的研究人员早在1990年开始就对面向对象思想的局限性进行了分析。他们研究出了一种新的编程思想,借助这一思想或许可以通过减少代码重复模块从而帮助开发人员提高工作效率。与此同时,美国Northeastern University的博士生Cristina Lopes和其同事也开始了类似的思考。最终,美国国防先进技术研究计划署(Defense Advanced Research Projects Agency即DARPA)注意到了这项工作,并提供了科研经费,鼓励将二者的工作成果结合起来。由此,AspectJ诞生了。它作为Java语言的一套扩展系统使得当今的程序员们现在就可以体验aop的思想。

Avanade公司的高级方案构架师Adam Magee认为,aop的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。”该公司是一架专注于微软技术的集成商。

aop的创业者们把这些通用服务称之为“横切关注点(crosscutting concerns)”,因为这些服务所提供的功能将横贯应用程序的多个对象需求。

aop应用到多个项目中的Magee也认为,“开发人员可以对横切关注点进行检测、审计、登陆、安全性检查或异常处理。编写这些服务的接口代码将会非常耗费时间,并且开发人员要学会如何这样做本身就已很长时间。”“这些事情将开发人员的精力从解决企业问题上面转移开来——而后者才是价值之所在。这些麻烦将他们引到了钻研复杂操作系统的艰难道路上。

优势

aop的目标就是要避免这些问题。它将编写横切关注点代码的工作进行分离——也就是所谓的“方面(aspects)”——把他们从组织为商业逻辑的对象的编写工作中分离出来,然后提供相应的功能构架。这样一来,应用程序就可以使用各个方面所提供的功能而无需重新编译或重新编写任何代码。

在一个应用程序有很多对象都需要相同横切关注点,这一技术即着眼于通过帮助开发人员创建所需要的横切关注点定义来为开发人员节省时间。如果要对每一个对象编写一个登录系统——aop中所谓的“散射(scattering)”实践——aop的先行者们建议在项目的设计阶段,开发人员就应当定义应用程序中每个对象的登录需求,然后创建一个单独的登录工具执行该应用程序中任何所需的登录操作。

aop的支持者们认为,这样的方式有几个优点。第一,在定义应用程序对某种服务(例如登录)的所有需求的时候,所花费的精力将使得该服务能够被更好的定义,更好的被编写代码,并获得更多的功能。这种方式还能够处理在代码涉及到多个功能的时候所出现的问题,例如改变某一个功能可能会影响到其它的功能,在aop中把这样的麻烦称之为“纠结(tangling)”。

其次,在创建离散方面所进行的分析将有助于为开发团队指定一位精于该项工作的专家,由此负责这项工作的最佳人选将可以有效利用自己的相关技能和经验。

第三个好处则是持久性的。标准的以对象为导向的项目开发中,不同的开发人员通常会为某项服务编写相同的代码,例如登录。随后他们会在自己的实施中进开发各自的登录服务以满足不同单个对象的需求。而通过创建一段单独的代码片段,aop提供了解决这一问题的持久简单的方案,这一方案强调了未来功能的重用性和易维护性:不需要在整个应用程序中一遍遍重新编写登录代码,aop使得仅仅编写登录方面(logging aspect)成为可能,并且可以在这之上为整个应用程序提供新的功能。

所有的这些好处都是的需要编写的代码量大大缩减,由此节省了时间,控制了开发成本,并且能将资源投入到比编写登录程序更为有价值的活动中去。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134