第五章 面向方面编程___OOP和AOP随想

  面向方面编程,又称面向切面编程(Aspect-Oriented-Programming),英文缩写 AOP,可以说是 OOP(Object-Oriented-Programming)面向对象编程的补充和完善。OOP 引入封装,继承,多态性等概念来建立一种对象层次结构,这种对象层次结构通俗的说也就是我们所说的软件。对于 OOP,我记得 Bruce Eckel 有一句名言,“ Everything is Object. ”,中文翻译为 “万物皆对象” 。我们可以将万物定义为一些对象,并将这些对象的行为和属性封装起来,同时定义好对象与对象之间的关系。实质上,在现实开发中,往往有一些角落一直以来被 OOP 忽略或者说未能解决好的,AOP 是 OOP 的一种补充或某种改进,它转换了编程的方式和视角。

  在我们以往的开发中,有一些代码往往和核心业务无关,但却大量的分布在所有的对象层次当中。比如:银行业务和事务处理之间,一个是银行的核心业务,一个是非核心业务,他们并从业务的角度上来说,并没有什么真的关联,但是他们却没有彼此分离开来,还有诸如银行业务与日志记录,权限验证,性能检测等等功能,没有与核心业务分离开来。

  如图,核心 业务模块A 中与 核心业务模块B 之中都包含了与他们的核心业务无关的逻辑,最终造成的高耦合状态。

  通过上图我们可以知道,当在软件开发中我们要为这些分散的对象引入公共的行为时,OOP 则显得无力。OOP 定义了从上到下的关系,但是并不适合定义从左到右的关系。这时,当 OOP 正在为定义这些左右关系而烦劳的时候,AOP (面向方面编程) 出现了。

  通过 AOP(面向方面的编程),可以将程序的责任分开,对象与方面互不干扰。面向方面的模块并非显式地为对象所调用,而是通过或注入或截取的方式,去获得被封装的对象内部方法间的消息,然后做出相应地处理。也许面向方面的模式破坏了对象的封装,却正其如此,方才能降低模块与模块之间的耦合度。同样地,通过对“方面”的封装,将这些通用的功能从不同的类中分离出来,使不同的模块都能共享同样的“方面”,这也极大地减少了重复代码。通过上面的图可以看出,通过 AOP 的方式,将业务逻辑和横切逻辑从业务模块中分离出来,极大的降低了系统的耦合。

  如果说 “对象” 是一根竹竿,竹竿其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这一根竹竿切成很多截,以获得其内部的消息。而切开的竹截,也就是所谓的 “方面” 了。然后它又巧妙的将这些切开的切面复原,不留痕迹。

  本系列导航帖 : http://www.cnblogs.com/cilence/archive/2013/02/21/2920455.html

  由于个人水平有限,以上字符仅代表个人观点。

posted on 2013-03-19 15:47  何旭  阅读(2157)  评论(2编辑  收藏  举报