APP下载

面向J2EE主流框架的MDA模型转换研究

2012-08-15谢培基余金山

网络安全与数据管理 2012年17期
关键词:精化层次结构框架

谢培基,余金山

(华侨大学 计算机科学与技术学院,福建 泉州 362021)

计算机业界一直在探索一种新方法,既能够提高软件的开发效率,又能使所开发出来的软件能够有更高的质量和更长的生命周期。面向对象思想、分布式计算开发、基于组件开发等新方法都为这一探索起到了应有的作用。而模型驱动架构(MDA)同样也为软件开发的进步发挥了重要作用。

MDA (Model Driven Architecture)[1]是 OMG 组织在2001年正式提出的一种模型组织管理框架,它定义了平台无关模型(PIM)和平台相关模型(PSM),同时把PIM到PSM之间的自动映射定义为模型转换。MDA提供了一系列指导软件开发的方法,这种开发方法将传统的重编程过程提高到了重系统模型设计的层次,使得开发人员能更好地设计系统,有效地提高了软件的开发效率,同时降低了编程开发费用、解决了系统需求不断变化带来的维护性困难问题。

1 MDA模型转换方法

在基于MDA的软件开发过程中[2],主要的两个步骤是PIM到PSM的模型转换和PSM到代码的转换。因为PSM与其对应的系统实现平台技术紧密相关,因此这一转换相对较为直接,且有众多MDA工具的支持。而将PIM转换到PSM是一个较为复杂的过程[3],也是当前研究MDA的一个重点。本文归纳出了几种模型转换方法。

(1)手动转换方法:即系统开发人员使用已经定义好的模型操作的API,将源模型转换到目标模型的方法。例如JMI,在J2EE中提供了一套完整的JMI的类库,系统开发人员可以通过编程实现相应的模型转换。这种转换并没有使模型转换自动化,所以很难在实际应用中得到推广。

(2)基于 XMI的模型转换方法[4]:实际上也是一种文本转换方法,该转换方法将源模型用XMI文本的形式表示,也相当于用XMI来存储源模型,然后将XMI里的元素一个个按步骤转换到目标模型。这种转换方法的优点是相对简单,缺点是转换速度慢、步骤较多且繁杂、不够直观、容易导致模型前后的不一致。

(3)基于模式的模型转换方法[5]:该方法建立在其他模型转换方法的基础上,引入模式的概念,将一些可用的模型转换方案包装成模式,然后以模式的形式放到存储库里以实现模型转换方案的添加删除和复用。这种模型转换方法通常会改变源模型的结构信息,使其更加符合设计理念,而没有改变模型的抽象级别和增加它的语义。

(4)结构驱动转换方法:该方法主要分为两个不同的步骤[6]:①为目标模型建立多层次的体系结构;②设置目标模型中的索引和属性。这种转换方法设计了一个总的规则调度框架和转换机制,用户需要做的就是提供转换规则,然后实现模型的转换。著名的模型驱动开发工具OptimalJ中的模型转换框架就是使用结构驱动的方法。

面向 J2EE主 流 框 架 Struts、Spring和 Hibernate等MDA模型转换,当前还没有标准化的模型转换方法,以上的几种模型转换方法也未能提供有效的支持,其中方法(1)和方法(2)过于简单、手动化;方法(3)建立在其他模型转换方法上,未能提供完整的解决方案;方法(4)有现成的工具,但偏向于模型到代码的转换。

针对 Struts、Spring和 Hibernate的整合框架 (SSH整合框架)的技术特性,本文提出了基于元模型和UML Profile相结合的模型转换方法。其思想是先抽象出平台无关模型PIM和平台相关模型PSM的元模型,然后制定元模型间的转换规则,间接实现PIM到PSM的模型转换。而在建立PIM和PSM的元模型时,UML并不能完整地描述出针对特定平台或技术的模型信息,但UML自身具备的扩展机制UML Profile,为构建MDA的各种特殊模型提供了有力的支持,因此本文借助UML Profile来建立PIM和PSM的元模型。其转换过程如图1所示。

图1 基于元模型的模型转换

2 面向J2EE主流框架的模型转换

根据上文提出的模型转换方法,首先建立PIM和PSM的元模型,然后分析元模型间的映射关系,建立具体的转换规则,间接实现PIM到PSM的模型转换。

2.1 建立PIM元模型

建立PIM元模型应充分考虑PSM所属平台的特性,确定使用何种建模技术来建立PIM以及建立一个能与PSM元模型相呼应的PIM元模型,以便制定模型转换规则。当前基于动态行为建模的模型很少应用到MDA中,且这方面的模型转换技术还不够成熟,因此,本文采用静态结构的类图对SSH框架建模,对于Struts框架的建模,本文忽略其视图层,对控制器层和模型层采用类图表示。

在使用静态的类图结构来描述PIM时,往往是用描述业务的领域对象模型来表示PIM,但是一个系统的领域对象模型不足以完整描述系统的总体架构,因此需要进一步对PIM模型进行精化,使其既能描述领域对象间的关系又能描述系统的总体架构。

SSH整合框架是一种多层架构模式,可分为表示层、控制器层、业务逻辑层、实体层、数据持久层、数据库层,这种N层架构模式实际上是对经典的Web应用软件体系结构的扩展,也可以说是一个适合于SSH整合框架的Web应用层次结构。同时这种分层结构又是一种广泛应用的软件体系结构,不涉及到特定的技术或与平台相关。因此,本文构建出一个与平台无关又能适合于SSH整合框架的Web应用层次结构,以此来弥补领域对象模型的不足,展现系统的总体架构,这也是对PIM的精化。

本文把这种Web应用层次结构的模型作为PIM元模型。利用UML Profile来建立Web应用层次结构模型如图2所示。

图2 Web应用层次结构

图2中,Controller是控制器,负责将视图层发过来的用户请求委派给相应的Action;Action调用需要的Service类来实现业务逻辑功能;DAO则提供数据访问功能;Entity 是实体类,与 Action、ServiceImpl、DAOImpl是依赖关系,这三个类可以声明实体类的对象,或接收实体类对象参数,因此它们之间是使用依赖的关系。

在进行PIM到PSM的模型转换时,考虑到PIM的平台独立性,假如不对PIM的元模型进行扩展,则有可能造成PIM与PSM元模型元素间的映射关系复杂化等情况,在模型转换过程中也将使得转换不够明朗,最终影响模型转换的效果。因此,本文采用了UML Profile对Web应用层次进行了相应的扩展。表1列出了层次结构中的构造型,表2列出了构造型的属性值。

表1 构造型

表2 构造型的属性值

2.2 建立PSM元模型

对抽象SSH整合框架的元模型,本文先抽象出各个框架的元模型,然后对这些元模型进行整合以得到SSH整合框架的准元模型。下面对Spring、Hibernate两个框架的元模型抽取做具体的研究,而对Struts框架,前面已经忽略掉了对视图层的处理,在此也不对Struts的核心MVC进行元模型抽取,而是简单地使用Web应用层次结构来表达控制器与业务逻辑的关系。

2.2.1抽象Spring框架的元模型

Spring框架的两大核心是:面向切面编程(AOP)和控制反转(IoC)。其核心在Web应用开发中起着举足轻重的作用。

(1)抽象 Spring IoC的元模型

在IoC中,Spring容器把所有需要管理的类声明成bean,一个 bean包括 id、class和 properties等。抽象出的Spring IoC的元模型如图3所示。

图3 IoC元模型

(2)抽象Spring AOP的元模型

AOP的提出是软件开发史的一次重大创新,它用面向切面编程的思想有效地解决了横切关注点问题。AOP的原理如图4所示。图中AOP在类A、类B等的方法上加入一个切面,并把一个可以声明成bean的切面类织入到切面中,当程序执行到切面的时候先执行Aspect对象再往下执行。切面类可以为记录日志、错误处理、数据验证等提供服务。

图4 AOP原理

根据图4的AOP原理,对照应用开发,抽象出AOP的元模型如图5所示。

图5 AOP元模型

2.2.2 抽象Hibernate框架的元模型

Hibernate框架在业务逻辑层中又分出了数据持久层,数据持久层除了实现对象关系的映射,还封装了底层数据库操作类,为程序开发带来了很好的灵活性,也避免了数据库表的直接暴露。在抽象Hibernate框架的元模型时,为每一个实体类Entity创建一个对应的数据访问接口EntityDAO,这样既使得持久层的结构清晰,又能与业务逻辑层的服务接口很好地衔接。对Hibernate框架抽象出的元模型如图6所示。

图6 Hibernate框架元模型

2.2.3 SSH整合框架的PSM元模型

在抽象出各个框架元模型的基础上,对这三个框架的元模型进行整合得到如图7所示的SSH整合框架的PSM元模型。

图7 SSH整合框架的PSM元模型

该SSH整合框架元模型不但串联了各个框架的元模型,同时也融合了Web应用的层次结构,为PIM到PSM的模型转换提供了极大的便利。在对Spring框架元模型整合中,控制器类、业务逻辑类、数据访问类、面向切面编程类都继承bean类,亦即这些类都可以声明成bean被IoC容器来管理。对Hibernate框架元模型的整合,主要是对业务逻辑层和数据持久层的整合。

SSH整合框架元模型同样采用了UML的扩展机制UML Profile进行了相应的扩展。表3列出了该元模型的构造型。

表3 PSM元模型的构造型

2.3 PIM到PSM的模型转换

根据本文提出的模型转换方法,模型转换过程从一个初始的领域对象模型开始,根据定义的精化规则对其求精形成准PIM模型,然后根据模型转换规则,转换成相应的PSM模型。

2.3.1 PIM的精化

要实现PIM到PSM的转换,首先需要建立适应Web应用层次结构的PIM模型,而在实际应用中,一开始往往建立的是领域对象模型,不能很好地满足Web应用层次结构。因此可以参考系统的其他UML图(如用例图对这一初始PIM进行精化形成准PIM),使其能遵循PIM元模型的规范。本文对PIM的精化定义了如下的精化规则:

(1)为每个领域对象生成一个同名的实体类,领域对象的属性对应实体类的属性,关键字对应实体类的ID,领域对象间的关联关系对应实体类的关联。

(2)为每个实体类生成一个对应的数据访问接口EntityDAO和实现类EntityDAOImpl,并添加需要的方法,EntityDAOImpl能调用对应的实体类。

(3)在业务逻辑层中,为每个实体类根据需要建立相应的EntityService接口和其实现类EntityServiceImpl或其他的服务类,添加需要的属性和方法,EntityServiceImpl类可以访问实体类Entity和数据访问类EntityDAO。

(4)结合其他 UML图生成控制器类 Controller和Action,Action可以调用需要的服务类。

2.3.2 PIM到PSM的模型转换规则

PIM到PSM的模型转换是MDA应用开发的核心,模型转换规则则是PIM到PSM的转换的核心,可以说模型转换规则是MDA应用开发核心的核心,足以见得模型转换规则的重要性。下面定义了具体的模型转换的转换规则:

(1)<<Entity>>转换到 PSM

生成与<<Entity>>相同的实体类,将领域对象间的关联<<EntityRelation>>映射成实体类的关联映射<<MappingRelation>>,将领域对象的主键<<primaryKey>>映射到<<Entity_ID>>。主要转换规则如下:

(2)<<DAOImpl>>、<<ServiceImpl>>、<<Action>>、<<Aspect>>转换到 PSM

将 PIM 中的 每 个<<DAOImpl>>、<<ServiceImpl>>、<<Action>>、<<Aspect>>转换成对应的<<bean>>, 主要转换规则如下:

(3)<<Action_Service>>、<<ServiceImpl_DAO>>转 换到PSM

将每个<<Action_Service>>、<<ServiceImpl_DAO>>关联映射成PSM中的<<Property_DI>>,根据关联的命名来定义规则,如<<ServiceImpl_DAO>>关联,是将 DAO bean注入到ServiceImpl bean中,则主要转换规则如下:

(4)对<<Action>>、<<ServiceImpl>>、<<DAOImpl>>实现到 PSM(AOP)中的转换

根据<<Action>>、<<ServiceImpl>>、<<DAOImpl>>构造属性<<aopType>>的值,选择对应的PSM中的Aspect类。 属 性<<advice>>、<<pointCut>>对 应 PSM 中 的<<Advice>>、<<PointCut>>, 本文选取<<ServiceImpl>>实现到PSM(AOP)中的转换,其他的两个转换规则类似。主要转换规则如下:

本文分析了几种主流的模型转换方法,但这些方法并未对J2EE主流框架提供有效的支持,而本文提出的基于元模型和UML Profile相结合的模型转换方法,通过建立PIM元模型和PSM元模型,以及制定元模型间的转换规则,间接实现了PIM到PSM的模型转换。

[1]MILLER J,MUKER JI.MDA guideversion1.0[M].Object Management Group, 2003:3-7.

[2]FRANKEL D S.应用 MDA[M].鲍志云译.北京:人民邮电出版社,2003:138-142.

[3]OLDEVIK J, SOLBERG A.Framework for model transformation and code generation. In: Enterprise Distributed Object Computing Conference[C].EDOC′02.Proceedings.Sixth International, 2002:181-189.

[4]张德芬,李师贤,古思山.MDA中的模型转换技术综述[J].计算机科学,2006,33(10):228-230.

[5]张天,张岩.基于MDA的设计模式建模与模型转换[J].软件学报,2008,19(9):2203-2217.

[6]王永涛,刘勇.基于 MDA的模型转换研究[J].计算机工程,2011,37(16):84-87.

猜你喜欢

精化层次结构框架
框架
增量开发中的活动图精化研究
广义框架的不相交性
特殊块三对角Toeplitz线性方程组的精化迭代法及收敛性
n-精化与n-互模拟之间相关问题的研究
基于层次分析法的电子设备结构方案评价研究
基于部件替换的三维模型生成方法
建构利益相关者管理的三层次结构分析
基于计算机防火墙防护技术探究分析
关于原点对称的不规则Gabor框架的构造