AOP——引言

1、引言

2、AOP技术基础

3、Java平台AOP技术研究

4、.Net平台AOP技术研究


软件设计因为引入面向对象思想而逐渐变得丰富起来。“一切皆为对象”的精义,使得程序世界所要处理的逻辑简化,开发者可以用一组对象以及这些对象之间的关系将软件系统形象地表示出来。而从对象的定义,进而到模块,到组件的定义,利用面向对象思想的封装、继承、多态的思想,使得软件系统开发可以向搭建房屋那样,循序渐进,从砖石到楼层,进而到整幢大厦的建成。应用面向对象思想,在设计规模更大、逻辑更复杂的系统时,开发周期反而能变的更短。自然其中,需要应用到软件工程的开发定义、流程的过程控制,乃至于质量的缺陷管理。但从技术的细节来看,面向对象设计技术居功至伟。然而,面向对象设计的唯一问题是,它本质是静态的,封闭的,任何需求的细微变化都可能对开发进度造成重大影响。

可能解决该问题的方法是设计模式。GOF将面向对象软件的设计经验作为设计模式纪录下来,它使人们可以更加简单方便地复用成功的设计和体系结构,帮助开发人员做出有利于系统复用的选择。设计模式解决特定的设计问题,使面向对象设计更灵活、优雅,最终复用性更好。然而,设计模式虽然给了我们设计的典范与准则,通过最大程度的利用面向对象的特性,诸如利用继承、多态,对责任进行分离、对依赖进行倒置,面向抽象,面向接口,最终设计出灵活、可扩展、可重用的类库、组件,乃至于整个系统的架构。在设计的过程中,通过各种模式体现了对象的行为,暴露的接口,对象间关系,以及对象分别在不同层次中表现出来的形态。然而鉴于对象封装的特殊性,“设计模式”的触角始终在接口与抽象中大做文章,而对于对象内部则无能为力。

Aspect-Oriented Programming(面向方面编程,AOP)正好可以解决这一问题。它允许开发者动态地修改静态的OO模型,构造出一个能够不断增长以满足新增需求的系统,就象现实世界中的对象会在其生命周期中不断改变自身,应用程序也可以在发展中拥有新的功能。AOP利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理、日志管理、权限控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

面向方面编程(AOP)是施乐公司帕洛阿尔托研究中心(Xerox PARC)在上世纪90年代发明的一种编程范式。但真正的发展却兴起于近几年对软件设计方兴未艾的研究。由于软件系统越来越复杂,大型的企业级应用越来越需要人们将核心业务与公共业务分离。AOP技术正是通过编写横切关注点的代码,即“方面”,分离出通用的服务以形成统一的功能架构。它能够将应用程序中的商业逻辑同对其提供支持的通用服务进行分离,使得开发人员从重复解决通用服务的劳动中解脱出来,而仅专注于企业的核心商业逻辑。因此,AOP技术也就受到越来越多的关注,而应用于各种平台下的AOP技术也应运而生。但由于AOP技术相对于成熟的OOP技术而言,在性能、稳定性、适用性等方面还有待完善,同时AOP技术也没有形成一个统一的标准,这使得AOP技术的研究更具有前沿性的探索价值。

posted on 2005-09-21 11:08 张逸 阅读(8744) 评论(15)  编辑 收藏 所属分类: AOP

评论

#1楼  2005-09-21 11:34 idior      

好!   回复  引用  查看    

#2楼  2005-09-21 11:36 Teddy's Knowledge Base      

Good! Wayfarer来中文的了~~ :)   回复  引用  查看    

#3楼  2005-09-21 11:57 FantasySoft      

中西结合,双管齐下,药到病除,哈哈~~~

Wayfarer,我申请加入D&P团队,希望能够获得批准。 :)   回复  引用  查看    

#4楼 [楼主] 2005-09-21 12:33 wayfarer      

@FantasySoft
热烈欢迎。已经加入D&P团队!   回复  引用  查看    

#5楼  2005-09-21 12:55 idior      

---
所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理、日志管理、权限控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
---
this defination doesn't make sense. 如果仅从封装逻辑角度来讲,完全可以用一个类来封装。或者一个组件来封装,为什么要用方面?!
方面的关键在于它不仅仅封装了逻辑, 还封装了对逻辑的调用。   回复  引用  查看    

#6楼 [楼主] 2005-09-21 13:04 wayfarer      

@idior:
不错,看得仔细啊!   回复  引用  查看    

#7楼  2005-09-21 13:19 idior      

你提到有人把enterlib称为方面。 这就是因为他没有理会到方面的真正含义。

方面的关键在于它不仅仅封装了逻辑, 还封装了对逻辑的调用。
封装逻辑应该采用静态的横切(即mixin),通过Mixin我们可以获得原有对象的信息,使得逻辑可以和业务对象相关。这点也是多继承所不如Mixin的地方。
封装逻辑的调用应该采用动态横切(即intercept),通过intercept我们可以获得被拦截方法的信息。

可以看出两种横切的完美结合,aspect可以得到丰富的原始信息,可以更好的完成aop的应用。很多人认为aspect和原始对象是没有关联的,这是一个盲点。

在我的oberver in aop的例子中就体现了这两点。
http://idior.cnblogs.com/idior/articles/229590.html

更进一步, 对若干的静态横切可以使用一个容器来组织他们,这样container和aop可以完美的结合在一起。   回复  引用  查看    

#8楼  2005-12-28 19:22 bbafasdfasdf [未注册用户]

aop将注定是个失败的概念。它引入的混乱要超过它想解决的问题。   回复  引用    

#9楼  2006-01-18 17:55 游客 [未注册用户]

理论与现往往有一大堆距离,有些并不象想象那么美好!!如OOP;
在理认上可以傲游九天,现实中确举步维坚;
建议结合实践进行研究!才有真正的价值,否则只可以拿来做一下报告!摆摆大师架子;   回复  引用    

#10楼  2006-02-05 10:58 FatBoy [未注册用户]

"The change of the requirement is a enemy we must fight against when we develop the software project. "

---- Excerpted from Wayfarer's English blog : "Encapsulation of Change (Part One)"

Your English is quite poor. How come you always like to write somthing in a language you don't master?

Do you know what mistake did you make in your sentence above?   回复  引用    

#11楼 [楼主] 2006-02-06 13:49 wayfarer      

@FatBoy:
Thank your comment. I had changed the mistake in my article. I agree with your opinion, my english is quite poor as you said. So why would I write it in English? The reason just is my english is very poor so that I must practise it. If you don't like to read my terrible english article, I don't force you to do it. To do, or not to do, it's your right, of course, it's mine too.   回复  引用  查看    

#12楼  2006-06-01 23:41 FleshBoy [未注册用户]

好文章,支持支持!   回复  引用    

#13楼  2006-06-01 23:41 FleshBoy [未注册用户]

好文章,支持支持!   回复  引用    

#14楼  2007-11-22 19:21 专注.NET开源项目 [未注册用户]

这里很多.net AOP资料
http://***/column_500_1.html

  回复  引用    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-10-18 09:44 编辑过


相关链接:
 



导航

公告

logo.gif
我的著作与译作

《软件设计精要与模式》

《WCF服务编程》

MVP_Horizontal_BlueOnly.png

From 03-03-2006
Counter: site stats

与我联系

搜索

 

常用链接

我参加的小组

我参与的团队

随笔分类(243)

随笔档案(235)

最新随笔

积分与排名

最新评论

阅读排行榜

评论排行榜