论文部分内容阅读
[摘要]面向方面编程(Aspect Oriented Programming,AOP)是一项允许编程人员模块化横切关注点的编程技术,AOP能够把横切到多個模块的功能:例如日志,异常,事务,安全等进行模块化,能够极大程度地降低系统间的耦合;本文介绍了面向方面编程的基本概念和语言规范,并使用AOP的思想在PostSharp平台实现股票模拟系统,实现轻量级的面向方面的系统,充分突出面向方向(AOP)对项目开发的优势,是AOP思想用于实际项目开发的一次探索。
[关键词]AOP;横切;PostSharp;
中图分类号:TF046.6 文献标识码:A 文章编号:1009-914X(2013)05-0280-01
1.引言
过去几年里,面向对象编程技术(OOP)已经成为了主流的编程技术,OOP的最大的好处就是解决了系统中的角色分配问题,将需求中的问题转化为不同的对象来解决,实现了软件的模块化设计。但是多数软件系统都包含跨越多个模块的非功能的关注点(concern),例如授权、日志、事务安全完整性检查、同步、异常处理等,传统的面向对象技术通常采用重构的方式解决,往往一个系统需要经过无限次的重构以达到较好的效果,于是开发也就陷入了重构的泥潭,这些非功能性代码亦叫横切关注点(crosscutting concems),这些关注点横切多个模块甚至整个系统,形成代码的混乱与交织,降低代码的耦合度和模块之间的独立性,而且横切的代码分布在系统的各个模块,采用传统的OOP思想进行开发,同样的代码要多次实现,这样无疑增加了软件的开发成本以及维护成本,而且功能性代码与非功能代码相互交织,使系统难于理解、难于实现并且难于维护。
目前对AOP的研究主要集中在对AOP开发语言的支持,集成工具的研发以及AOP建模,并没有把AOP理论用于实际项目的开发,本文将AOP的思想用于实际项目的开发实践,充分展示AOP思想的项目开发的优势,展示AOP的核心价值。
2.AOP机制的实现原理与PostSharp.Net
AOP是一种新的编程范性,它的核心思想是对横切关注点进行模块化。开发人员可以利用AOP所提供的语言机制实现对系统中横切关注点的分离。使代码结构更加清晰,停止重复开发,并且可以使开发人员更关注系统功能的开发。
2.1AOP机制的实现原理
AOP的实现由两部分组成:语言规范和实现。语言规范描述了语言的基础单元和语法;语言实现按照语言规范来验证代码的正确性,并把代码转化成目标机器可执行的形式。通过方面编织器把功能性代码和方面模块的代码编织在一起生产完整的系统。
AOP的开发步骤分为以下三步:
(1)方面分解:把系统需求分为核心关注点和横切关注点。
(2)关注点实现:分别实现横切关注点和核心关注点,核心关注点采用面向对象的机制实现,采用面向对象语言,可以是Java、c++、c#等,横切关注点用AOP的机制实现。
(3)方面组合:把两种关注点组合,通过编织器把横切关注点和核心关注点编织在一起从而形成最终系统。
2.2PostSharp.Net
Postsharp是一个用于在.Net平台实现的AOP框架,提供对面向编程的支持,PostSharp使用横切关注点静态植入的方式实现AOP。PostSharp采用MSILInjection诸如机制,使得静态代码注入的执行效率要高于使用Reflection Emit;另外,使用MSBuild Task,使得开发人员可以使用内置的Attribute使用AOP。
3.AOP项目实践
本文在PostSharp.Net上使用实现一个股票模拟系统,需求分析阶段分别找出股票模拟系统核心的功能:即是股票买卖,非核心功能为系统的日志,异常处理以及安全。
采用AOP思想,需求分析阶段分离出系统的核心关注点和横切关注点,核心关注点有股票报价、帐户管理和交易管理,横切关注点有日志和异常处理,核心关注点用OOP实现,横切关注点用AOP实现。
日志功能对股票交易系统至关重要,日志能够记录客户交易的情况,并且日志功能贯穿于交易管理的各个环节,如果采用传统的方法处理无疑增加系统的耦合度,先采用面向方面的思想进行处理,把日志功能封装在LogerAttribute中,采用PostSharp提供的静态植入机制,把日志代码植入到核心代码中。
异常处理在项目多个模块都有出现,而且采用相同的异常处理,采用传统的OOP方式,程序员没完成一项功能都要写大量的处理异常的代码,所以现采用AOP思想,把异常作为一个方面封装起来,这样大大减少了开发人员的工作量,开发人员只需要集中精力完成项目的核心攻击即可。
在核心代码实现时,只需要捕获异常的位置做植入标记即可,代码编译的时候就会自动的将异常代码注入到核心代码中,对日志的处理也是同样的道理。
由以上的项目可以看出AOP的好处,AOP可以很好的解决代码分散和代码混乱,因为AOP思想把横切在多个模块的功能,例如业务逻辑、性能、同步、日志以及安全因素都封装在单独的方面内,使代码的结构更加清晰。
系统开发效率的提高:使用AOP进行系统开发,可以分别实现核心关注点以及横切关注点,并且每个关注点的实现是相互独立的,从而达到提高程序开发效率的目的。
系统更利于维护:系统的维护有改正型维护、适应型维护和改进型维护。方面代码是相互独立的,方面模块根本不知道横切关注点,所以很容易通过方面加入新的功能,另外,当往已存在的系统中加入新的模块时,只需要在方面中分别实现就可以达到目的。
综上所述,AOP通过模块化横切关注点,AOP能够有效的提高的开发效率,并且AOP实现的系统结构更加清晰,更有利于系统的扩展和维护,模块化横切关注点,能够有效的降低系统的耦合度,提高代码的重用性。
4.结论
目前对AOP的研究主要集中在面向对象AOP的编程语言的支持以及建模方面,例如AspectJ,C#等等,支持AOP的集成开发环境也少之又少,虽然AOP思想有很多优势,但是并没有用于实际的项目开发。本文使用PostSharp.Net平台进行AOP项目实践,是AOP思想用于实际项目的一个尝试,本文的股票模拟系统只有股票的买卖,账户使用本地数据库进行管理,对股票模拟系统的要求还有一定的差距,另外,本文只设计两个方面:异常处理和日志,但对于一个股票交易系统来说,这些还远远不够,所以AOP用于大型的项目开发还需要不断的探索下去。
作者简介
陈俊贤(1980-),女,江苏苏州人,硕士,研究方向为软件工程。
蔡黎亚(1974-),女,江苏苏州人,硕士,研究方向信息管理。
[关键词]AOP;横切;PostSharp;
中图分类号:TF046.6 文献标识码:A 文章编号:1009-914X(2013)05-0280-01
1.引言
过去几年里,面向对象编程技术(OOP)已经成为了主流的编程技术,OOP的最大的好处就是解决了系统中的角色分配问题,将需求中的问题转化为不同的对象来解决,实现了软件的模块化设计。但是多数软件系统都包含跨越多个模块的非功能的关注点(concern),例如授权、日志、事务安全完整性检查、同步、异常处理等,传统的面向对象技术通常采用重构的方式解决,往往一个系统需要经过无限次的重构以达到较好的效果,于是开发也就陷入了重构的泥潭,这些非功能性代码亦叫横切关注点(crosscutting concems),这些关注点横切多个模块甚至整个系统,形成代码的混乱与交织,降低代码的耦合度和模块之间的独立性,而且横切的代码分布在系统的各个模块,采用传统的OOP思想进行开发,同样的代码要多次实现,这样无疑增加了软件的开发成本以及维护成本,而且功能性代码与非功能代码相互交织,使系统难于理解、难于实现并且难于维护。
目前对AOP的研究主要集中在对AOP开发语言的支持,集成工具的研发以及AOP建模,并没有把AOP理论用于实际项目的开发,本文将AOP的思想用于实际项目的开发实践,充分展示AOP思想的项目开发的优势,展示AOP的核心价值。
2.AOP机制的实现原理与PostSharp.Net
AOP是一种新的编程范性,它的核心思想是对横切关注点进行模块化。开发人员可以利用AOP所提供的语言机制实现对系统中横切关注点的分离。使代码结构更加清晰,停止重复开发,并且可以使开发人员更关注系统功能的开发。
2.1AOP机制的实现原理
AOP的实现由两部分组成:语言规范和实现。语言规范描述了语言的基础单元和语法;语言实现按照语言规范来验证代码的正确性,并把代码转化成目标机器可执行的形式。通过方面编织器把功能性代码和方面模块的代码编织在一起生产完整的系统。
AOP的开发步骤分为以下三步:
(1)方面分解:把系统需求分为核心关注点和横切关注点。
(2)关注点实现:分别实现横切关注点和核心关注点,核心关注点采用面向对象的机制实现,采用面向对象语言,可以是Java、c++、c#等,横切关注点用AOP的机制实现。
(3)方面组合:把两种关注点组合,通过编织器把横切关注点和核心关注点编织在一起从而形成最终系统。
2.2PostSharp.Net
Postsharp是一个用于在.Net平台实现的AOP框架,提供对面向编程的支持,PostSharp使用横切关注点静态植入的方式实现AOP。PostSharp采用MSILInjection诸如机制,使得静态代码注入的执行效率要高于使用Reflection Emit;另外,使用MSBuild Task,使得开发人员可以使用内置的Attribute使用AOP。
3.AOP项目实践
本文在PostSharp.Net上使用实现一个股票模拟系统,需求分析阶段分别找出股票模拟系统核心的功能:即是股票买卖,非核心功能为系统的日志,异常处理以及安全。
采用AOP思想,需求分析阶段分离出系统的核心关注点和横切关注点,核心关注点有股票报价、帐户管理和交易管理,横切关注点有日志和异常处理,核心关注点用OOP实现,横切关注点用AOP实现。
日志功能对股票交易系统至关重要,日志能够记录客户交易的情况,并且日志功能贯穿于交易管理的各个环节,如果采用传统的方法处理无疑增加系统的耦合度,先采用面向方面的思想进行处理,把日志功能封装在LogerAttribute中,采用PostSharp提供的静态植入机制,把日志代码植入到核心代码中。
异常处理在项目多个模块都有出现,而且采用相同的异常处理,采用传统的OOP方式,程序员没完成一项功能都要写大量的处理异常的代码,所以现采用AOP思想,把异常作为一个方面封装起来,这样大大减少了开发人员的工作量,开发人员只需要集中精力完成项目的核心攻击即可。
在核心代码实现时,只需要捕获异常的位置做植入标记即可,代码编译的时候就会自动的将异常代码注入到核心代码中,对日志的处理也是同样的道理。
由以上的项目可以看出AOP的好处,AOP可以很好的解决代码分散和代码混乱,因为AOP思想把横切在多个模块的功能,例如业务逻辑、性能、同步、日志以及安全因素都封装在单独的方面内,使代码的结构更加清晰。
系统开发效率的提高:使用AOP进行系统开发,可以分别实现核心关注点以及横切关注点,并且每个关注点的实现是相互独立的,从而达到提高程序开发效率的目的。
系统更利于维护:系统的维护有改正型维护、适应型维护和改进型维护。方面代码是相互独立的,方面模块根本不知道横切关注点,所以很容易通过方面加入新的功能,另外,当往已存在的系统中加入新的模块时,只需要在方面中分别实现就可以达到目的。
综上所述,AOP通过模块化横切关注点,AOP能够有效的提高的开发效率,并且AOP实现的系统结构更加清晰,更有利于系统的扩展和维护,模块化横切关注点,能够有效的降低系统的耦合度,提高代码的重用性。
4.结论
目前对AOP的研究主要集中在面向对象AOP的编程语言的支持以及建模方面,例如AspectJ,C#等等,支持AOP的集成开发环境也少之又少,虽然AOP思想有很多优势,但是并没有用于实际的项目开发。本文使用PostSharp.Net平台进行AOP项目实践,是AOP思想用于实际项目的一个尝试,本文的股票模拟系统只有股票的买卖,账户使用本地数据库进行管理,对股票模拟系统的要求还有一定的差距,另外,本文只设计两个方面:异常处理和日志,但对于一个股票交易系统来说,这些还远远不够,所以AOP用于大型的项目开发还需要不断的探索下去。
作者简介
陈俊贤(1980-),女,江苏苏州人,硕士,研究方向为软件工程。
蔡黎亚(1974-),女,江苏苏州人,硕士,研究方向信息管理。