张 博,李亚芬,王 普
(北京工业大学电子信息与控制工程学院,北京100124)
模型驱动架构 (model driven architecture,MDA)[1]是由对象管理组织 (object management group,OMG)提出的一个软件开发过程和方法,它定义了平台无关模型 (platform independent model,PIM)和平台相关模型 (platform specific model,简称PSM),其核心思想是以模型作为整个软件开发过程的中心,根据不同的开发阶段,使用不同抽象层次的模型对系统进行分析、提炼和获取相关的信息,如图1所示。
MDA的思想是将系统中的元素都看作一个模型或者一个模型元素,并且它们可以依照相关规范进行组合,在更高的层次上实现软件的复用。这种开发模式的优势主要体现在,模型贯穿于整个软件开发过程中,需求变更首先会体现在模型的变化上,而代码也是由模型自动生成的,所以这种开发模式不但可以提高软件开发效率,还可以将模型作为后期维护与系统再开发的可靠依据。可见MDA在一定程度上解决了传统软件开发所面临的种种问题,旨在降低系统中业务与技术的耦合,提高了系统的可移植性和可维护性。
图1 MDA设计模式
在设计一个Web系统时,数据库的建设是一个重要部分。传统的数据库的设计方法是直接建立ER模型 (entityrelation模型,ER模型)来描述系统,如采用PowerDesigner等工具。由此方法可以灵活地创建健壮的数据模型,但是它没有采用面向对象的技术对系统进行描述,忽略了软件系统的业务因素和需求对数据的影响,直接根据需求分析得到数据库模型,由于跨度比较大,容易造成设计的数据库与客户所需要的模型有较大的出入[2]。而面向对象的建模方法可以从需求分析的角度出发,循序渐进地构造模型,即从需求分析得到UML模型,再经过转换得到数据库模型,这种建模方法不易产生设计人员与客户之间对数据库理解的差异。
本文针对以上问题,提出一种基于元模型的UML模型到数据库模型的转换方法。采用MDA思想,在建立系统面向对象的UML模型的同时,将模型中的关联关系、约束等信息提取出来进行抽象描述,再通过ATL自动地转换成数据库模型。
模型是MDA的核心。在UML中,可以使用类、属性、关联、状态等元素描述一个完整的软件系统。模型是系统的抽象,它比实现系统更容易获取、理解和计算,确定一个将要在PIM到PSM的转换中使用到的元模型是一个艰巨的任务。不同层面的模型间的相互关系是符合元模型机构(meta object facility,MOF)标准的。MOF元对象设施是OMG组织提出的一个标准,它是自描述的,所有的建模语言 (如UML等)都是MOF的实例。
模型不仅仅是带标记的导向图,还包括一些基于元模型的精确描述和附加属性。从元模型的观点来看,PIM和PSM都没有一个唯一的元模型,模型转换就是将一种元模型中所定义的元类转换到另一种元模型定义的元类上。
本文以Web信息管理系统为例来说明UML模型到关系数据库模型的转换。在MDA框架下模型转换系统首先建立用UML类图描述的PIM,由UML的基本元素:类、属性、属性类型、关联关系、继承关系等构成。之后细化PIM模型的操作,再转化为关系数据库类型的PSM模型。具体的转换规则就是将上述的映射规则定义成可操作的代码,通过转换引擎调用这些规则进行模型的转换。最后将PSM模型输入到代码生成器中,用户就可以得到所需要的数据库操作代码,具体流程如图2所示。
图2 模型转换系统流程
当前MDA正处于发展阶段,模型转换方法有很多种。例如:手动转换方法 (人为地对源模型中的元素进行转换,得到目标模型)、基于规则的模型转换[3]、基于模板的代码生成技术 (例如AndroMDA)、基于关系代数的模型转换(将模型转换表达为一个二元关系或者一组二元关系)[4]、基于元模型映射的模型转换 (进行M1层模型转换时,以M2层的模型元素的映射作为转换规则来执行转换)[5]、基于模式的模型转换[6]、以及基于模型编织技术[7]等。
本文在研究基于MDA的UML模型到数据库模型的转换中,使用的转换是以元模型为基础的,采用Atlas转换语言进行转换。
Atlas属于开源的项目,其转换框架如图3所示。
图3 Atlas转换框架
图3 中的每个元素在MDA中都起着重要的作用。MOF是建立元模型的过程中行之有效的元元模型。PIM反映了系统的功能、结构和行为。PSM则更加注重实现,是对应于给定平台的PIM的一个模型描述。源模型和目标模型是符合这些元模型的模型实例。模型转换是通过一个转换引擎执行转换规则来完成的,转换规则制定如何从源模型生成目标模型[8]。一个完整的Atlas模型转换程序需要4个文件:源元模型a、目标元模型b、源模型、模型转换实例。通过转换生成的模型就是我们得到的目标模型。
通过上面的论述,只有在定义了完整的源元模型、目标元模型、模型转换规则和源模型的基础上,才能得到目标模型。因此,下面将逐一对上述模型进行分析与设计,并通过实例进行描述。
依据元模型自描述的特征,本文用UML类图来描述UML元模型。模型包括类、数据类型、属性、操作、关联等基本元素[9]。模型中的Class类和DataType类均继承自抽象类Classifier,其中最主要的类是Class类,它包括一组Attribute类型的属性,一组Operation类型的操作以及类之间的关联关系集合。类DataType为原始的建模数据类型,如图4所示。
图4 UML元模型
上述UML元模型是对系统的抽象描述,提取了系统中的类和关系。本文将针对北京市重点学科系统进行分析,依照UML元模型,建立其具体的模型描述。该系统中主要包含如部门Depart、部门主管Authority、学科Category、学科主管Director、一级学科One_dpl、二级学科Two_dpl等多个对象,每个对象拥有自己的属性,对象之间存在一对多,多对多等关联关系,例如一个部门有一到多个主管,多个部门可以对应多个学科、一级学科包含多个二级学科等等,这种关联关系用直线描述,在直线两端的数字表示数量关系。同时,在UML模型的Operation中加入CHECK操作对对象的属性进行约束,这样可以限制其取值范围或格式。源模型的UML模型如图5所示。
如图6所示,本文研究的目标是自动生成数据库模型,因此目标元模型的设计就是数据库元模型。关系数据库元模型也是由UML模型中的类进行描述的。在这个模型中的5个主要类别:表,列,键,外键和SQL数据类型。它们对应到数据库中的相应元素。主要的类是Table类,代表数据库的表,它包括一组列Column和对键Key的引用,Column通过键Key定义数据库的外键关系。列Column具有对数据类型SQLDataType的引用,表示列中数据所使用的数据类型。
2.4.1 总体设计
在设计了上述两个元模型的基础上,定义这两个模型之间的映射关系,即UML到数据库模型的映射。图7显示了从UML元模型到数据库元模型的完整映射。映射通过一组规则,指定源元模型 (即UML元模型)中的各个元素映射到目标元模型 (即数据库元模型)中各个元素[10]。在图中,两个元模型的映射使用图形符号“○”来表示,UML元模型在左侧,映射在中间,数据库元模型在右侧。此图形符号包含以下内容:连接 (源和目标),关联关系,转换规则和组成。一个连接表示一个或多个元模型元素之间的转换规则。转换规则将元模型通过转换,得到适当的目标元模型中的元素。最后,使用Atlas模型转换语言来对上述的转换规则进行编写,便得到转换规则的代码描述,.atl为文件后缀。如图7所示。
图5 系统源模型
2.4.2 转换规则设计
基于对应用程序或数据库的需求,模型会不断的变化,因此很有必要在UML模型和数据库模型之间建立映射规则,确保当发生需求变更时,仅需要对源模型进行修改,即可自动体现在目标模型上。
本文将规则设计为两部分:直接映射规则和间接映射规则。直接映射规则代表的是转换过程中无需进行操作,直接生成对应的模型元素,主要包括4个方面。
(1)主键 (FK):对象标识符映射为数据库主键,
所有的外键都设计为对主键的引用。
(2)数据类型 (DataType):UML元模型中的
DataType代表了在类图中所定义的属性的数据类型,它映射到数据库元模型中,就转换成数据库中的数据类型,即SQLDataType。
(3)列 (Column):UML模型中的属性映射为数据
库中的列,属性的数据类型即数据库中的SQLData-Type。
(4)约束:UML模型中的Operation操作中定义的
对属性的约束,将会映射为数据库中列的约束,CHECK在数据库中可以约束该列设定值的取值范围及格式。
间接映射规则代表的是无法由UML模型直接生成目标模型元素。需要在对映射元素进行判断后执行规则,间接映射主要涉及到两个主要方面:类的映射和关联关系的映射。
(1)类的映射:将类映射为关系数据库中的表时,需要对类之间的继承关系进行分析处理。继承关系的处理方法取决于在数据库中怎样组织类中被继承的属性。首先,将所有的类都映射为数据库中的表。这种方法为每个超类和子类都创建一张表,这些表共享一个公共的主键。如果存在继承关系,则将超类的属性下移,每个子类对应的数据库表中既包含该子类中的属性,也包含该子类所继承的属性。超类不映射为数据库表,这样就减少了数据库表的数量,访问速度有所提升。
(2)关联关系的映射:数据库模型中的关系是通过Key来描述的。Foreign Key是在一张表中出现的一个或多个数据属性,它是另一张Table的Key的一部分,或者是另一张Table的Key。Foreign Key让一张表中的一行与另一张表中的一行相关起来。如果要实现一对一或者一对多的关系,只需要将一张Table包含另一张Table的Key。
在模型转换的过程中,我们在源模型中定义了一个参数MultiValue,如果MultiValue=ture,那么表示该表和其他表具有一对多或者多对多的关系,如果没有此参数,则表示该表和其他表仅是一对一的关系,在转换规则中将分别对这些转换进行定义[11]。
下面以学科管理Web应用系统中的单位机构和学科门类为例来说明关联关系的映射:
多对多关联的映射:鉴于数据库的3个范式,多对多关联的实现并不能用两张表来进行实现,因此需要建立一张关联表。关联表是一张独立的表,它用于在关系数据库中维护两张或多张表之间的关联。在关系数据库中,关联表中包含的属性是关系中涉及到的表中的键的组合。关联表的名字是它所关联的表的名字的组合,或者是它实现的关联的名字。图8说明了如何在关系数据库中实现多对多的关联关系。
图8 多对多关联的映射
一对多关联的映射映射:如图9所示,在实现一对多关联时,设置MultiValue=ture,将外键Foreign Key放置在“多”的一方,角色作为外键属性名的一部分。外键的空与非空由对1的强制性决定。
图9 一对多关联的映射
针对图7列出的映射关系对照图,采用Atlas转换语言对其一一进行描述,得到转换规则代码。由于篇幅所限,这里给出模型转换的代码片段:
module UML2Database;
create OUT:Database from IN:UML;
rule Class2Table;
rule DataTypeAttribute2Column{
from
a:UML!Attribute(
a.type.oclIsKindOf (UML! DataType ) and not a.multiValued
)
to
out:Database!Column(
name< - a.name,
type<-a.type
)}…
…
rule Attribute2Column{
from
a:Class!Attribute(
a.type.oclIsKindOf(Class!Class)and not a.multi Valued
)
to
out:Relational!Column(
name < - a.name+ 'Id',
type<-thisModule.objectIdType
)}
通过执行转换规则,源模型按照相关映射关系,得到了目标模型,即数据库模型,它是XMI格式描述的,用UML图形化表示后,如图10所示。
由UML设计的源模型经过ATL转换,得到了数据库目标模型。它们分别用数据库的表,列,主键,外键来描述整个系统,是一个完整的数据库系统。对于源模型中的多重关系,生成了新的关联关系表,用名称_名称表示,里面包含关联的基本信息。由生成的目标模型可以看出,UML类图中的每个元素均按照对应的转换规则进行转换。源模型中存在5个关联,因此生成了5个关联关系表。
U M L对象模型在本质上只是一个扩展的实体-关系(ER)模型,它强调的是面向对象的观点,同时,ER模型现在已被普遍接受,所以在面向对象的设计中,U M L使得软件和数据库使用相同的模型一起工作,保证了系统的一致性设计。本文探讨了在MDA中使用建立数据库模型的方法,分析了在元模型的基础上UML模型与关系数据库模型之间的映射关系,并使用Atlas转换语言对其进行代码级的描述。在下一步工作中,应考虑更多模型的复杂性,不断完善模型间的映射关系,进一步提高模型转换的精度和完整性,针对更多业务领域编写相关的模型及模型转换实例。
图10 目标数据库模型
[1]Joaquin Miller,Jishnu Mukerji.MDA guide version 1.0.1 [EB/OL ].http://www.omg.org/cgi-bin/doc? omg/03-06-01,2003.
[2]XIONG Xinfu.Research of relational database modeling based on UML[D].Chengdu:University of Electronic Science and Technology of China,2011(in Chinese).[熊信富.基于UML的关系数据库建模研究与实现[D].成都:电子科技大学.2011.]
[3]ZHANG Zheng,HE Keqing.A rule-based model transformation method [J].Application Research of Computers,2005,22(10):16-19(in Chinese).[张征,何克清.一种基于规则的模型转换方法 [J].计算机应用研究,2005,22(10):16-19.]
[4]JIANG Lu.MDA-based transformation between UML models[D].Xi’an:Xidian University,2009:1-23(in Chinese).[蒋璐.基于MDA的UML模型转换[D].西安:西安电子科技大学,2009:1-23.]
[5]Tihomir Calic.Exploration of model driven architecturecapabi-lities via comparative utilization of MDA tools[D].Reno:University of Nevada,2006.
[6]ZHAO Ping.Research of the model transformation technology in MDA [D].Harbin:Harbin Engineering University,2010:3-17(in Chinese).[赵萍.模型驱动系统中模型转换技术的研究[D].哈尔滨:哈尔滨工程大学,2010:3-17.]
[7]Fabro MDD,Jouault F.Model transformation and weaving in the AMMA platform [C]//Proc of the Generative and Trans.Techniques in Software Engineering,2005:71-77.
[8]Jos'e Barranquero Tolosa,Oscar Sanju'an-Mart'lnez.Towards the systematic measurement of ATL transformation mo-dels[J].Software– Practice and Experience,2011,41(7):789-815.
[9]France R B.Model-driven development using UML 2.0:promises and pitfalls[J].Computer,2006,39(2):59-66.
[10]Jesus M Alemndros,Luis Iribarne.UML modeling of user and database interaction [J].The Computer Journal,2009,52(3):348-367.
[11]Pontus Bostr,Mats Neovius,Ian Oliver,et al.Formal transformation of platform independent models into platform specific models[C]//Abo Akademi University,Department of Information Technologies Turku Centre for Computer Science,2007.