转自
http://blog.csdn.net/puny/archive/2007/05/26/1627084.aspx
上个月月底刚完成一个web项目,这个项目一期和二期一共花1年左右时间,跨度达3年之久;3年之中共参与了2个web项目和2个C/S项目,都没有时间空闲下来总结下东西。最近在整理一个项目的需求,之间要反复评审所以可以腾出来一些时间,想把一些积累都整理下。(CSDN的BLOG不敢恭维经常写一大段保存时候程序出问题,没有拷贝还得重新写!)这段时间已经整理出一个轻量级的ORM,下个项目准备使用castle的AOP(aspect#),所以这段时间把AOP的资料整清楚.
AOP是aspect oriented programming的缩写,是面向方面的思想. 那什么是面向方面?它主要运用在什么领域呢?我们已经对面向过程和面向对象(OOP)已经非常耳熟了,从面向过程到面向对象是一种飞跃;我们可以用面向对象思想取代以前的面向过程的思想,但从面向对象发展到面向方面,不是一种取代而是一种补充.面向对象最重要的作用就是解耦,一个系统中用面向对象思想可以解决大部分的东西,但还有一些点和面还不能用OOP(面向对象)来解决,而AOP可以解决OOP不好处理的角落和方面,所以AOP决不是OOP的代替品,是OOP的一种强力补充.
一、面向方面剖析
在面向对象中我们把重点放在对象上,当然面向方面要在'方面'上做文章.面向方面就是要我们只关注方面,比如有一个需求,我们把它分解成几个方面,包括主业务方面和其他辅助方面;这样在构架某个方面时只专注于该方面,不用在乎其他方面的内容;每个方面都独立钩架清楚了我们再通过AOP框架把它们整合起来.使用AOP能大幅度地降低了各个方面的耦合程度,使在设计各个模块(方面)时能更加高效独立,结构更清晰.举个例子:
我们要做个文章管理系统,传统的做法可以分解成几个模块:文章登记管理主业务功能和日志管理及权限管理;日志管理和权限不相关的话可以独立处理,但处理主业务功能时就要参合日志管理和权限管理,这样模块之间的耦合就非常紧密,如下图:
上图,在设计主业务功能时就要涉及日志管理和权限管理,造成主业务功能模块比较混乱,结构不清晰.以此类推:如果其他模块也相互使用和依赖的话,那模块设计时不只考虑本模块的因素还要考虑其他模块的因素,就变得很复杂了!
当我们引入并使用AOP后,把这个系统分解成三个方面:主业务功能方面(主方面) 日志管理方面和权限管理方面(后面两个是辅助方面).在设计及处理的时候我们可以把这三个方面分配三个不同处理,每个人只需要关心自己方面的内容而不用担心其他方面对他的影响,所有方面都是独立设计的!最后通过AOP框架把这些方面组合起来,满足系统需求.
上图看出, 每个方面都可以独立处理,然后通过AOP把这些方面联系起来.这方式最后生成的系统与传统的做法最后生成系统是一样,但AOP中每个模块的设计更加独立 耦合小 结构清晰 业务处理也很清楚.
二、主要应用领域及用途
目前AOP应用比较多的是在日志管理、权限管理、数据同步和其他业务管理引擎方面;之前我接触的工作流比较多,对这方面的东西比较有经验了,去年设计了这个工作流引擎组件,后来发现如果在这个组件里应用AOP技术相关引伸出来的思想或者技术会非常理想的(这个组件准备这几个月把它完善起来)!所以可以看出AOP应用还是比较广泛的,不仅仅局限于它本身的应用,还可以从其相关应用技术引伸出来思想的使用。
三、AOP相关技术领域
实现AOP思想技术有好几种,目前比较流行的是动态代理和静态织入。静态织入就是在程序编译时把辅助方面的业务关系直接插入到主业务方面代码里面,我认为这种技术将来一定会比较流行的,但现在用这个实现的少(目前好象也不好实现);动态代理是在运行时产生一个 代码类来代理处理各个方面的关系,dotnet现在大多数AOP框架都用这个,比如:sprint.net的AOP框架和castle中的AOP框架(aspect#)都是以动态代理为基础来实现AOP的。后面的文章会持续分析CASTLE的AOP的原理及其使用。
四、总结
这几年框架使用比较多是MVC、ORM、IOC。但AOP还没被广泛使用,很多人都持观望态度;通过这几年的发展AOP框架在不断完善,也逐渐得到认可,其思想和技术也不断延伸。AOP是一种很好的技术和思想,即使你现在不想使用这种框架,了解AOP对你的程序构架也有莫大的好处!
分享到:
相关推荐
AOP思想和事务注解应用
在本文中,我们将深入探讨Spring AOP的核心概念、工作原理以及如何在实际项目中实现AOP思想。 1. **AOP概述** 面向切面编程(Aspect-Oriented Programming,AOP)是一种编程范式,旨在减少代码的重复性,提高模块...
在Android应用开发中,数据获取和网络请求是不可或缺的部分,而高效的请求管理框架可以极大地提升开发效率和用户体验。...理解和掌握AOP思想及其在Android中的应用,对于提升Android开发能力具有重要意义。
标题中的“API 线索图”可能意味着本文将通过一种图解的方式,即流程图或者类图的形式,来阐述Spring AOP的编程思想和API的使用。 描述中,“小马哥讲 Spring AOP 编程思想”表明这是由一位专家小马哥讲解的内容,...
AOP(Aspect Oriented Programming,面向切面编程)是一种编程范式,旨在减少代码的重复性和...通过研究这个项目中的代码,开发者可以深化对AOP原理和实践的理解,并将其应用于实际项目中,提升代码质量和可维护性。
面向切面编程(Aspect Oriented Programming,简称AOP)是一种编程范式,旨在...通过深入学习和实践这些材料,你将能够熟练地在项目中运用AOP,提高代码的整洁性和可维护性,同时更好地理解面向切面编程的思想和价值。
总的来说,Spring的AOP思想极大地提升了代码的整洁性和可维护性,使得开发者能够更加专注于业务逻辑,而不是重复的公共服务。在实际项目中,合理利用AOP可以显著提高开发效率,并降低系统复杂度。通过深入理解和熟练...
总之,Android AOP编程思想是提高代码复用和模块化的重要手段,通过巧妙运用注解和编译时处理,可以让开发者更专注于业务逻辑,而不是重复的“横切”代码。在实践中不断探索和优化,AOP能成为提升Android开发效率的...
动态代理在许多场景下都有应用,特别是在实现面向切面编程(Aspect-Oriented Programming,简称AOP)时。AOP的核心思想是将关注点分离,将业务逻辑与横切关注点(如日志、事务管理等)解耦。在Java中,我们可以利用...
4. **应用场景**:AOP动态代理常用于框架开发,例如Spring AOP。Spring AOP提供了基于代理的实现,可以在不修改原始代码的情况下,为业务方法添加额外的功能。此外,它还支持基于注解的切面定义,使得AOP的使用更加...
通过调试和分析测试结果,你可以更深入地理解AOP的工作原理和实际应用。 总之,仿Spring AOP框架提供了一个学习和实践AOP的平台,它涵盖了自定义注解、切面、通知等核心概念。通过动手实践,开发者可以更好地掌握...
AOP 的主要思想是将关注点从横向切面转移到纵向切面,例如某个系统的安全机制、事务机制、日志机制等,这些机制都是纵向切面的关注点。AOP 使得编程更加灵活、可维护、可扩展。 AOP 的应用范围 AOP 非常适合开发 ...
总的来说,aopalliance-1.0.jar作为AOP联盟的基础库,为Java开发者提供了统一的AOP接口标准,促进了不同AOP框架间的协同工作,是理解和应用面向切面编程不可或缺的一部分。在使用过程中,配合合适的AOP框架,可以极...
AOP的核心思想是将分散在各个模块中的交叉性代码(如日志、事务处理)抽取出来,形成独立的切面,以便于复用和维护。它提供了一种模块化的方式,使得我们可以专注于编写核心业务代码,而无需关心那些通用但又分散的...
Spring AOP(面向切面编程)是Spring框架中的一个重要特性,它允许开发者在不修改源代码的情况下,通过插入额外的代码(称为切面)来增强应用程序的功能。这主要通过代理模式实现,使得我们可以集中处理系统中横切...
AOP的核心思想是将这些关注点从主业务逻辑中分离出来,实现代码的模块化和解耦。 1. AOP的基本概念: - 切面(Aspect):AOP的核心单元,包含了横切关注点的定义,可以理解为一个模块化的功能集合。 - 连接点...