一种基于MDA的领域元建模开发方法

2023-05-30 01:27刘磊周业林杨小兵
计算机与网络 2023年1期
关键词:代码生成

刘磊 周业林 杨小兵

摘要:模型驱动架构(Model Driven Architecture,MDA)是一种先进、系统、高效的软件开发方法。然而掌握MDA模型转换和实现完整代码生成,具有一定的难度。在研究元建模技术的基础上,对领域建模语言(Domain Specific Language,DSL)与元建模相结合的开发方法进行了探索,该方法基于MDA以模型为中心的思想,能快速通过模型转换实现完整代码的生成,易用性提高。结合Web应用系统这个领域,利用领域型元建模工具MetaEdit+,以学生健康信息收集系统的开发为例,验证了领域元建模开发方式在解决领域问题上的可行性。

关键词:模型驱动;模型转化;代码生成;领域语言;元建模;建模工具

中图分类号:TP31文献标志码:A文章编号:1008-1739(2023)01-54-5

0引言

当今社会,人们的工作生活更加依赖各类信息系统提供的便利化管理和服务,各行业软件开发需求大量增长。传统的开发方式以编写代码为核心,存在文档和代码容易脱节、系统平台转换麻烦以及投入人力、物力高的问题。2001年,国际对象管理组织提出了模型驱动架构(Model Driven Architecture, MDA)的方法[1],以模型为中心,通过模型转换,自动生成程序代码,这样的方式可以有效地解决传统开发方式存在的文档和代码不能统一的问题。然而随着时间的推移,MDA的开发方式并没有大规模得到应用和推广。而以建立建模语言的元建模技术却正在逐渐兴起,元建模技术是一种轻量化的MDA,在元建模工具的支持下,能高效地实现形式化建模和完整的代码转化。针对不同的问题领域,领域建模语言与元建模技术相结合可以更好地针对问题本身,解决问题,满足用户的需求,并实现代码自动生成。

1 MDA面临的问题

MDA没有广泛地推广和应用,综合分析主要有2方面原因:一是模型转换复杂,不易于掌握和使用。模型转换是MDA开发方法的核心。模型转换是通过模型转换工具,按照定义的转换规则,将源模型转换成为目标模型的过程。随着模型转换开发工具的推出和改进,模型转换逐渐得到了应用。然而,模型转换并不像人们想象的那样容易。模型之间的转换就分好几种类型,包括PIMtoPIM,PIMtoPSM,PSMtoPSM,PSMtoPIM和PSMtoCode等,其中模型转换的技术也有很多种,很抽象,采用的技术路线不容易理解,比如:QVT转换方法、基于图文法的转换和基于结构的转换等[2],一般的开发人员很难掌握。二是支持MDA的工具软件还不完善。MDA中最常用的建模工具UML,体系庞大复杂,支持UML的MDA工具有Rational Rose,Enterprise Architect,IBM Rational Software Architec,Powerdesigner,Trufun等,只能生成部分代码或是程序框架[3],常规的操作都被包含在实体模型中,但是对于业务逻辑的操作,只产生空的方法体[4],与生成完整应用系统还有相当的差距,这也制约了MDA真正投入到日常的软件开发过程,国产支持MDA的工具软件更是寥寥无几。

2元建模基础

要理解元建模首先要了解元模型。模型是对现实世界事物的一种抽象和概括,元模型是定义模型的模型,它是对模型的构成进行更高层次的抽象,元模型的构成还可以继续抽象,抽象形成的模型称为元元模型,从理论上说,抽象还可以继续延伸深化,但抽象到了一定的层次已经可以解决建模的问题了,过度的深入没有太大的现实意义。OMG专门为模型的实现和抽象制定了核心标准即元对象机制(Meta-Object Facility,MOF)[5],其结构如图1所示。

MOF是一个4层模型,从下到上是逐渐抽象的过程是逐渐实现的过程,也是模型转换的过程。M0层的对象是M1层对象的实例,M1层对象是M2层对象的实例,M2层对象是M3层对象的实例,这里的实例是相对于上一层模型而言,并不完全都是实现,只有M0层是具体的事物。MOF位于M3层,是最高层次的抽象,MOF可以自己构造自己,自己描述自己。常见的用UML建立的模型属于M1层,UML的元模型属于M2层。同样,用DSL建立的模型属于M1层,而DSL元模型属于M2层。本文研究的元建模是指处于M2层的DSL元模型。

3元建模技术

元建模指的是建立一種带语义描述建模语言的元模型[5],需要有支持相关建模语言的工具。通过这个工具来设计、呈现这个元模型。

3.1建模语言

软件开发是为了解决问题,问题是有领域的,因此,软件开发也面临问题领域。对于建模语言来说,相应可以按照适用范围,分为通用语言(General Purpose Language,GPL)和领域语言(Domain Specific Language,DSL)。GPL常见的有UML,C和Python等语言,优点是适用面广,缺点是太通用、不聚焦,不能很好地表达一些具体问题。UML作为一种通用建模语言,支持其建模的工具是最多的,然而UML过于通用和复杂,从UML模型生成完整的应用系统是很困难的,其包含大部分抽象概念,不是来自于问题域的抽象,导致UML中描述的模型与问题域存在一定的差异。DSL常见的有HTML,SQL和MERL等,优点在于贴近问题域,对于领域设计人员而言,领域建模语言学习起来更容易,从领域模型生成程序相对容易。根据资料显示,基于元建模的领域建模要比基于UML的效率高出10倍[5]。元建模开发示意如图2所示。

3.2建模工具

元建模除了建模的理论,还需要有强大的工具软件来整合配置元元模型、模型,并实现模型到相关平台代码的自动生成。因此元建模工具是非常关键的。现在出现了不少元建模工具,常见的有GME,EMF,Visual Studio DSL,GMF和MetaEdit+等。EMF是Eclipse的一项全新的建模框架,该框架允许代码自动生成,支持模型和元数据管理,可高效完成模型转换,生成的模型可转换为Java代码,在现有工具中具有强大的生命力[6]。Visual Studio DSL是Windows平台下的图形化工具,包括元建模环境和代码生成,除了提供模型与图形之间的支持,还提供了对模型的验证、规则和事务的支持[7]。GME是美国范德比特大学研发的一款元建模工具,其元模型是建立在UML基础上,并利用关系数据库来存储[8]。GMF提供了图形化的开发环境和基本的框架,设计人员可在图形环境中定制自己的领域模型,并自动生成代码框架[9]。MetaEdit+具有专属的元建模语言和生成器定义语言,不需要依赖UML的模型,具有灵活的DSL定义功能,不需要手工编写代码,代码生成器具备强有力的代码生成功能[10]。MetaEdit+可以快速设计建模语言而且成本低廉,适用于信息系统的开发,工具的帮助文档内容十分友好,方便进行学习和使用。

3.3建模框架

元建模框架是元建模的开发的模式和架构,发展到现在,元建模框架结构主要有2种类型[11]:

①基于通用建模工具的元建模

这是最常用的一种架构,以通用建模工具为核心。开发人员使用通用建模工具建立某个领域的元模型;用元模型来对通用建模工具做配置,使通用建模工具成为支持该元模型的建模工具,通过配置过的建模工具来生成应用的源代码。其优点是支持多种元模型进行配置,从而支持多种建模语言。这类元建模工具有MetaEdit+,GME等。

②基于专用建模工具的元建模

定制生成一个专用的建模工具,通过这个建模工具来生成应用的源代码。这种建模方式的优点是建模工具是定制、对建模的支持更好,缺点是使用难度较大,采用这种架构的元建模工具主要有EMF和GMF。

通过元建模工具及架构的比较,由于MetaEdit+具有功能全面、适用于信息系统开发,使用相对容易,且有良好的文档支持、能快速建模的特点,因此,选择MetaEdit+作为研究领域元建模开发的建模工具。

4元建模开发实例

为了领域建模语言+元建模能实现基于MDA的元建模架构开发,并最终生成系统代码,将通过一个简单的学生健康收集系统“InfoCollecting”开发过程进行验证。近2年来,加强新冠肺炎防控,保护人民群众生命安全成了日常的一件重大事情。对于学校来说,校园疫情防控压力很大,除了定期开展核酸检测筛查以外,还必须加强学生日常健康申报管理,“InfoCollecting”系统就是以此为背景设计。系统有2类活动参与者,并且他们对系统具有以下几种操作。

①学生(注册系统、登录系统、健康登记、查询登记信息、修改密码和退出系统)。

②管理员(登录系统、更改密码、查询登记信息、管理登记信息和退出系统)。

4.1系统设计模式

InfoCollecting系统主要考虑采用B/S结构,系统设计模式使用Model-View-Controller,Model层代表业务逻辑层最终通过JavaBeans来实现,读写数据库,View层代表交互界面层最终通过JSP来生成、提交和响应用户请求,Controller层代表控制器层,负责View层和Model层之间的衔接。

4.2MetaEdit+元建模的主要步骤

MetaEdit+以GOPPRR作为元建模语言,主要包含6种元素,分别是Graph(图)、Object(对象)、Property(属性)、Por(端口)、Relationship(联系)和Role(角色)[11]。Graph指一种由对象及其联系组成的图形;Object指一种事物,用一种图形符号来表示;Property指其他5种元素所具有的特点描述;Port指角色连接对象的一个特定位置;Relationship指对象之间的连接关系;Role定义了对象如何参与到一个联系中,如图3所示。

MetaEdit+元建模的主要步驟如下:

步骤1利用GOPPRR元元模型,设计系统元模型

元模型的建立是将应用系统涉及的对象领域概念、数据库概念的内容及它们之间关联抽象成为Objects,Relationships,Roles,Property和Port等元元模型,在通过这些元元模型来描述应用系统,建立Graph图形元模型。在MetaEdit+中使用Graph Tool工具来建立图形元模型。图4给出了“InfoCollecting”部分的系统元模型。Graph Tool可以根据抽象的模型元素创建图所需的各种对象、联系、角色以及其之间的绑定关系,图形还可以包含子图形和各种约束条件。

猜你喜欢
代码生成
α-β滤波基于SCADE Suite的开发
Lustre语言可信代码生成器研究进展
基于代码生成的PMSM滑模控制
一种基于模型和模板融合的自动代码生成方法
代码生成技术在数据序列化方面的应用
基于SSH框架的JavaEE项目代码生成工具的研究与实现
基于Web应用界面的代码自动生成软件设计
代码生成技术在软件开发中的应用
基于Simulink的模型调度系统设计及应用
基于XML的代码自动生成工具