MVCA模式设计及应用研究
2012-04-29郑建华陈尔晓
郑建华 陈尔晓
摘要:在分析了MVC模式对AOP技术支持的不足之后,提出了MVCA模式,该模式将横切关注点封装成方面层,并动态隐形地织入到MVC各层中。最后通过罗定市茶叶产业科技集成服务平台设计实例阐述了MVCA模式的应用,并解析了基于配置文件的动态隐形织入技术。
关键词:面向方面编程;MVCA模式;横切关注点
中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)01-0199-02
Design and Application Research of MVCA Pattern
ZHENG Jian-hua, CHEN Er-xiao
(Department of Computer science & Eng. ,ZhongKai University of Agriculture & Eng., Guangzhou 510225, China)
Abstract: After analyzing the deficiency of MVC mode for supporting AOP technology, MVCA mode was proposed, which capsulate the cross-cutting concerns as aspect layer and can dynamically and invisibly weave aspect into MVC layer. In the end the paper analyses the ap? plication of MVCA Pattern by an example of LuoDing City Technology Integration Service Platform for Tea ,and explain the dynamically and invisibly weaving technology by configuration file.
Key words: Aspect-Oriented Programming(AOP); MVCA mode ; cross-cutting concern
在传统的面对对象程序设计中,如日志,安全,异常处理等这样系统级的横切关注点经常和系统的核心应用逻辑形成代码交织,使得已存在的遗留代码难于维护和理解。面向方面编程[1](Aspect-Oriented Programming :AOP)它以解决横切关注点为出发点,用最小的耦合处理每个关注点,将横切关注点封装在一个独立的模块里,通过系统全模块化的方式降低软件复杂性,促进核心功能模块和横切关注点模块彼此的复用。当前Web应用软件广泛采用MVC三层架构模式,能实现通过控制器来联系表示层和业务层,有效降低了两个层次之间的耦合,降低了系统开发的复杂度。但是MVC模式并没有直接支持AOP技术,而文献[2]仅仅考虑了在MVC模式中的业务层内融合AOP的设计。对一个Web应用而言,随着功能和规模的扩大,各层的复杂性都会增加,为此本文设计了MVCA模式,并基于MVCA模式实现了Web系统的开发。
1 MVC模式分析
模型(Model)-视图(View)-控制器(Controller)(MVC)是Xerox PARC在八十年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已被广泛使用。对于MVC模式[3]来说,其优点主要是使得各个层次分工明确、实现了各层的解耦合,但是随着软件的规模的不断发展,特别是随着横切关注点的提出后,MVC模式表现出一定的不适用性,MVC模式中重点关注核心关注点,对于横切关注点则没有单独考虑进来,在每个层次中依然掺杂着横切关注点,只要开发系统能够满足基本的客户要求的业务功能即可,这些横切关注点功能都是在开发完成时逐步添加到核心关注点上,这种开发开发方式本文称为“混杂式开发”,其存在以下不足:1)“混杂式开发”使得系统横切和核心关注代码交织,系统模块化不彻底;2)由于模块化不彻底,使得核心和横切关注点模块不能重用,导致模块重用性低;3)由于横切和核心关注点代码交织,对系统的修改容易破坏“开放封闭”原则,系统扩展性低。
2 MVCA模式设计
针对MVC模式的不足以及在开发中所遇到的问题,本文提出MVCA模式,MVCA模式在MVC模式的基础上添加方面层(Aspect),形成了控制层、模型层、视图层、方面层的四层架构。方面是对横切关注点的封装,每一个层次的操作当要使用到横切关注点的时,Aspect就会主动地插入到某一层的某个步骤当中,而这种插入对于控制层和模型层是隐藏的,控制层和模型层不知道方面的存在,这样在MVCA模式中,程序员不必修改原有的代码,只是编写方面层,最后采用AOP技术织入到其他三层当中,本文称这种开发方式为“编织式开发”,MVCA模式如图1所示。途中的虚线表示了方面层对其他各层的“织入”作用。
与MVC模式相比,MVCA模式的优势主要表现在以下方面:
1)彻底地模块化
MVCA模式把系统的关注点分为核心关注点和横切关注点,再把横切关注点织入到系统各个模块中,这样就把系统划分为主要的核心模块和横切模块,使得系统彻底地模块化和系统彻底地解耦。
2)复用性高
MVCA模式中开发出来的Aspect层具有高度的可复用性,这样使得系统的核心关注点和横切关注点都可以实现复用,从而加快了开发的效率。
3)扩展性强
扩展性强的系统可以快速适应系统的需求变更,MVCA模式引入了Aspect层,并采用“编织式开发”,使得开发人员可以只关注业务变更模块的修改,而无需关注横切关注点对不同模块的影响,加快了系统对业务需求变更的响应。
3实例应用及基于配置的动态隐形织入技术分析
本小节基于上节提出的MVCA模式开发了罗定市生态茶叶产业科技集成服务平台,、该平台主要包括:茶叶生产服务、茶叶文化、茶叶产品流通服务、科技培训服务等模块,这些模块将作为系统的核心关注点模块,同时本文把系统日志的记录、权限的认证、安全性检查、异常的抛出等抽取出来当做方面,形成方面层,作为系统的横切关注点模块,在具体应用时再采用“动态隐形织入”技术织入各核心关注点模块中,以下以日志记录为例,讲述了日志记录如何动态隐形织入到其他层次当中。
日志的记录能够有效地记录了用户进行的操作,系统出现的问题等功能,能够帮助开发更好地了解系统的纠错和系统的性能。日志记录是横切到系统的各个模块,这些模块的操作之后都要进行日志的记录。故本文将这些日志记录功能从系统中单独分离出来当作一个日志方面,并在系统各个模块不知情的情况下进行动态隐形织入,即在各个模块中并没有显示调用日志记录的方面模块,但是日志记录方面模块已经隐式地注入到这些模块当中。图2是各个模块中需要动态的织入日志处理结构图。
图2中的茶叶生产服务、茶叶文化、茶叶产品流通服务、科技培训服务等模块进行业务逻辑操作时需要进行日志记录,本系统中将日志记录作为一个Aspect模块(日志方面)动态地织入(Weaving)到以上四个模块当中,对于以上的四个模块而言其根本不知道日志方面的存在。织入操作本文主要采用基于配置文件的方式来实现隐形动态织入,以尽量减少模块间的耦合。配置的代码如下所示:
其中id是日志方面的标识,用于标识确定唯一一个方面;
ref=”loggerTeaProduceServiceAop”说明了应用了功能库层中的横切功能库中LoggerTeaProduceServiceAop方面类;
method指定应用LoggerTeaProduceServiceAop方面类里的哪个方法;
pointcut指定动态插入到哪里执行。比如:
表示cn.easier.business.logger.service.impl包下的TeaProduceServiceImpl类的insertGWErrorLogger方法,任意返回值和任意的参数。
4结束语
随着软件复杂度性的增加和规模的变大,必须考虑核心关注点和横切关注点分离的问题,虽然AOP技术是解决横切关注点的有效手段。但是现有的MVC模式并不能很好的支持AOP技术,为此本文提出了MVCA模式,该模式将横切关注点封装成方面层,并动态隐形地织入到MVC各层中,通过该模式能实现系统彻底模块化,以及具有高复用性和扩展性强等优点。后续的研究将在此基础上,设计基于MVCA模式的多层Web系统架构,以便更好的支持WEB系统开发。
参考文献:
[1]曹东刚,梅宏.面向Aspect的程序设计-一种新的编程范型[J].计算机科学,2003,30(9):5-10.
[2]赵成勇,周南,张晓泉.基于AOP与MVC模式的Web应用架构的设计与实现[J].南京大学学报:自然科学版,2005,41(10):718-724.
[3]黎永良,崔杜武.MVC设计模式的改进与应用[J].计算机工程,2005(9):96-98.